Skip to content
Snippets Groups Projects
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
predis5.2.php 102.83 KiB
<?php
class PredisException extends Exception { }

// Client-side errors
class Predis_ClientException extends PredisException { }

// Aborted multi/exec
class Predis_AbortedMultiExec extends PredisException { }

// Server-side errors
class Predis_ServerException extends PredisException {
	public function toResponseError() {
		return new Predis_ResponseError($this->getMessage());
	}
}

// Communication errors
class Predis_CommunicationException extends PredisException {
	private $_connection;

	public function __construct(Predis_Connection $connection, $message = null, $code = null) {
		$this->_connection = $connection;
		parent::__construct($message, $code);
	}

	public function getConnection() { return $this->_connection; }
	public function shouldResetConnection() {  return true; }
}

// Unexpected responses
class Predis_MalformedServerResponse extends Predis_CommunicationException { }

/* ------------------------------------------------------------------------- */

class Predis_Client {
	const VERSION = '0.6.6';
	private $_options, $_connection, $_serverProfile, $_responseReader;

	public function __construct($parameters = null, $clientOptions = null) {
		$this->setupClient($clientOptions !== null ? $clientOptions : new Predis_ClientOptions());
		$this->setupConnection($parameters);
	}

	public static function create(/* arguments */) {
		$argv = func_get_args();
		$argc = func_num_args();

		$options = null;
		$lastArg = $argv[$argc-1];
		if ($argc > 0 && !is_string($lastArg) && ($lastArg instanceof Predis_ClientOptions ||
			is_subclass_of($lastArg, 'Predis_RedisServerProfile'))) {
			$options = array_pop($argv);
			$argc--;
		}

		if ($argc === 0) {
			throw new Predis_ClientException('Missing connection parameters');
		}

		return new Predis_Client($argc === 1 ? $argv[0] : $argv, $options);
	}

	private static function filterClientOptions($options) {
		if ($options instanceof Predis_ClientOptions) {
			return $options;
		}
		if (is_array($options)) {
			return new Predis_ClientOptions($options);
		}
		if ($options instanceof Predis_RedisServerProfile) {