php中重载数组操作符_PHP教程
php
功能
在
实现
接口
提供
操作
数组
比
重载
在php中提供了许多接口用于实现一些很特定的功能,比如你想把一个对象当作array使用时,只需要实现ArrayAccess接口,当你想要foreach中能够使用一个对象时,只需要实现Iterator接口,下面给一个例子出来
[php]
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 (! emptyempty ( $dataDir ) && is_dir ( $dataDir ))
{
$this->dataDir = $dataDir;
}
if (! emptyempty ( $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 (! emptyempty ( $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 ! emptyempty ( $data );
}
/* (non-PHPdoc)
* @see Iterator::rewind()
*/
public function rewind()
{
reset ( $this->arrData );
}
}
/**
* 获取一个BtstoreElement对象
* @return BtstoreElement
*/
function btstore_get()
{
if (emptyempty ( BtstoreRoot::$root ))
{
BtstoreRoot::$root = new BtstoreElement ( ScriptConf::BTSTORE_ROOT, null );
}
return BtstoreRoot::$root;
}
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前
By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前
By 尊渡假赌尊渡假赌尊渡假赌
刺客信条阴影:贝壳谜语解决方案
2 周前
By DDD
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前
By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
4 周前
By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

PHP 8.4 带来了多项新功能、安全性改进和性能改进,同时弃用和删除了大量功能。 本指南介绍了如何在 Ubuntu、Debian 或其衍生版本上安装 PHP 8.4 或升级到 PHP 8.4

CakePHP 是 PHP 的开源框架。它的目的是使应用程序的开发、部署和维护变得更加容易。 CakePHP 基于类似 MVC 的架构,功能强大且易于掌握。模型、视图和控制器 gu

Visual Studio Code,也称为 VS Code,是一个免费的源代码编辑器 - 或集成开发环境 (IDE) - 可用于所有主要操作系统。 VS Code 拥有针对多种编程语言的大量扩展,可以轻松编写

CakePHP 是一个开源MVC 框架。它使开发、部署和维护应用程序变得更加容易。 CakePHP 有许多库可以减少大多数常见任务的过载。

本教程演示了如何使用PHP有效地处理XML文档。 XML(可扩展的标记语言)是一种用于人类可读性和机器解析的多功能文本标记语言。它通常用于数据存储
