php中重载数组操作符
来源:互联网 发布:棋牌类游戏的算法代码 编辑:程序博客网 时间:2024/05/18 02:48
在php中提供了许多接口用于实现一些很特定的功能,比如你想把一个对象当作array使用时,只需要实现ArrayAccess接口,当你想要foreach中能够使用一个对象时,只需要实现Iterator接口,下面给一个例子出来
class BtstoreRoot{/** * 根结点 * @var BtstoreElement */static $root;}class BtstoreElement implements ArrayAccess, Iterator{/** * 当前所代表的目录 * @var string */private $dataDir;/** * 当前所代表的数据 * @var array */private $arrData;/** * 构造函数 * @param string $dataDir * @param array $arrData */function __construct($dataDir, $arrData){$this->dataDir = '';$this->arrData = array ();if (! empty ( $dataDir ) && is_dir ( $dataDir )){$this->dataDir = $dataDir;}if (! empty ( $arrData )){$this->arrData = $arrData;}}function __get($key){if (isset ( $this->arrData [$key] )){$data = $this->arrData [$key];if (is_array ( $data ) && ! is_object ( $data )){$data = new BtstoreElement ( '', $data );}return $data;}if (! empty ( $this->dataDir )){$path = $this->dataDir . '/' . $key;if (is_dir ( $path )){$data = new BtstoreElement ( $path, null );$this->arrData [$key] = $data;return $data;}if (is_file ( $path )){$content = file_get_contents ( $path );$arrData = unserialize ( $content );$data = new BtstoreElement ( '', $arrData );$this->arrData [$key] = $data;return $data;}}trigger_error ( "undefined index:$key" );}function __isset($key){if (isset ( $this->arrData [$key] )){return true;}if (file_exists ( $this->dataDir . '/' . $key )){return true;}return false;}function toArray(){return $this->arrData;}/* (non-PHPdoc) * @see ArrayAccess::offsetExists() */public function offsetExists($offset){return $this->__isset ( $offset );}/* (non-PHPdoc) * @see ArrayAccess::offsetGet() */public function offsetGet($offset){return $this->__get ( $offset );}/* (non-PHPdoc) * @see ArrayAccess::offsetSet() */public function offsetSet($offset, $value){trigger_error ( 'offsetSet not implemented by BtstoreElement' );}/* (non-PHPdoc) * @see ArrayAccess::offsetUnset() */public function offsetUnset($offset){trigger_error ( 'offsetUnset not implemented by BtstoreElement' );}/* (non-PHPdoc) * @see Iterator::current() */public function current(){return current ( $this->arrData );}/* (non-PHPdoc) * @see Iterator::next() */public function next(){return next ( $this->arrData );}/* (non-PHPdoc) * @see Iterator::key() */public function key(){return key ( $this->arrData );}/* (non-PHPdoc) * @see Iterator::valid() */public function valid(){$data = current ( $this->arrData );return ! empty ( $data );}/* (non-PHPdoc) * @see Iterator::rewind() */public function rewind(){reset ( $this->arrData );}}/** * 获取一个BtstoreElement对象 * @return BtstoreElement */function btstore_get(){if (empty ( BtstoreRoot::$root )){BtstoreRoot::$root = new BtstoreElement ( ScriptConf::BTSTORE_ROOT, null );}return BtstoreRoot::$root;}
- php中重载数组操作符
- C++重载[]数组操作符
- 数组的操作符重载
- 数组操作符的重载
- C++中重载操作符
- c++中 操作符重载
- C++中操作符重载
- C++ 中[]操作符重载
- c++中重载<<操作符
- C++中操作符重载
- C++运算符重载(12) - 重载数组索引操作符[]
- 类中友元函数 、重载操作符 和 数组
- 重载数组下表操作符
- 重载数组下标操作符,使用operator
- 重载数组下标操作符,使用operator
- 34-数组操作符[]的重载
- C++学习笔记--数组操作符重载
- php中foreach操作数组的代码
- ubuntu 自定义分辨率
- contiperf施压机制初步探索总结
- Linux 驱动i2c -- Gsenser(一)
- SQLBULKCOPY批量插入数据使用
- 组播实例
- php中重载数组操作符
- (转)深入分析 Java I/O 的工作机制
- Java安全(加密、摘要、签名、证书、SSL、HTTPS)
- 几个不太准确的C++概念
- USACO section3.3 Home on the Range(压缩+枚举)
- PHP基本语法
- export 在shell脚本中设置环境变量失效
- Das U-Boot Power On Self Tests (POST)
- 二叉查找树的数据结构以及实现(JAVA)