ArrayAccess 创建一个类数组对象
PS:原创文章,如需转载,请注明出处,谢谢!????
本文地址:http://flyer0126.iteye.com/blog/1502576
?
/** * 单例模式实现类-->ArrayAccess(数组式访问)接口 * * @author flyer0126 * @since 2012/4/27 */class Single{private $name;private static $_Instance = null;private function __construct(){}static function load(){if(null == self::$_Instance){self::$_Instance = new Single();}return self::$_Instance;}public function setName($name){$this->name = $name;}public function getName(){return $this->name;}}$s = Single::load();$s->setName("jack");echo $s->getName(); //jack// 调整一下(继承ArrayAccess && 实现4个方法)class Single implements ArrayAccess{private $name;private static $_Instance = null;private function __construct(){}static function load(){if(null == self::$_Instance){self::$_Instance = new Single();}return self::$_Instance;}public function setName($name){$this->name = $name;}public function getName(){return $this->name;}/** * 实现四个方法 * offsetExists(),用于标识一个元素是否已定义 * offsetGet(),用于返回一个元素的值 * offsetSet(),用于为一个元素设置新值 * offsetUnset(),用于删除一个元素和相应的值 **/public function offsetSet($offset, $value) {if (is_null($offset)) {$this->container[] = $value;} else {$this->container[$offset] = $value;}}public function offsetGet($offset) {return isset($this->container[$offset]) ? $this->container[$offset] : null;}public function offsetExists($offset) {return isset($this->container[$offset]);}public function offsetUnset($offset) {unset($this->container[$offset]);}}$s = Single::load();$s->setName("jack");$s["name"] = "mike";echo $s->getName(); //jackecho $s["name"]; //mikeprint_r($s);/**Single Object( [name:Single:private] => jack [container] => Array ( [name] => mike ))**/
?
后述:
ArrayAccess(数组式访问)接口 提供像访问数组一样访问对象的能力的接口。
OO实现逻辑的封装,而当这种封装对我们已有的逻辑调用方式产生变更时,可以利用这种方式进行巧妙转变。
?