您当前的位置: 首页 > 网站编程 > PHP教程 > php重载数组操作符

php重载数组操作符

作者:不详 来源:网络 发布时间: 2014-08-21 21:55 点击:
在php中提供了许多接口用于实现一些很特定的功能,比如你想把一个对象当作array使用时,只需要实现ArrayAccess接口,当你想要foreach中能够使用一个对象时,只需要实现Iterator接口,下面给一个例子出来 class BtstoreRoot { /** * 根结点 * @var BtstoreElement */ st

php重载数组操作符

  在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重载数组操作符"由远航站长收集整理而来,仅供大家学习与参考使用。更多网站制作教程尽在远航站长站。
顶一下
(0)
0%
踩一下
(0)
0%
[点击 次] [返回上一页] [打印]
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 密码: 验证码:
关于本站 - 联系我们 - 网站声明 - 友情连接- 网站地图 - 站点地图 - 返回顶部
Copyright © 2007-2013 www.yhzhan.com(远航站长). All Rights Reserved .
远航站长:为中小站长提供最佳的学习与交流平台,提供网页制作与网站编程等各类网站制作教程.
官方QQ:445490277 网站群:26680406 网站备案号:豫ICP备07500620号-4