PHP的ArrayAccess学习笔记
来源:互联网 发布:ibms软件厂家 编辑:程序博客网 时间:2024/06/06 02:30
在 PHP5 中多了一系列新接口。在 HaoHappy 翻译的你可以了解到他们的应用。同时这些接口和一些实现的 Class 被归为 Standard PHP Library(SPL)。在 PHP5 中加入了很多特性,使类的重载 (Overloading) 得到进一步的加强。ArrayAccess 的作用是使你的 Class 看起来像一个数组(PHP 的数组)
下面是 ArrayAccess 的摘要:
ArrayAccess {/* 方法 */abstract public boolean offsetExists ( mixed $offset )abstract public mixed offsetGet ( mixed $offset )abstract public void offsetSet ( mixed $offset , mixed $value )abstract public void offsetUnset ( mixed $offset )}
由于PHP的数组的强大,很多人在写 PHP 应用的时候经常将配置信息保存在一个数组里。下面就来介绍下如何实现像访问数组一样访问对象。
class obj implements arrayaccess { private $container = array();//定义数组 //初始化 public function __construct() { $this->container = array( "one" => 1, "two" => 2, "three" => 3, ); } //set操作 public function offsetSet($offset, $value) { if (is_null($offset)) { $this->container[] = $value; } else { $this->container[$offset] = $value; } } //检查是否已定义 public function offsetExists($offset) { return isset($this->container[$offset]); } //删除操作 public function offsetUnset($offset) { unset($this->container[$offset]); } //取值操作 public function offsetGet($offset) { return isset($this->container[$offset]) ? $this->container[$offset] : null; }}$obj = new obj;var_dump(isset($obj["two"]));var_dump($obj["two"]);unset($obj["two"]);var_dump(isset($obj["two"]));$obj["two"] = "A value";var_dump($obj["two"]);$obj[] = 'Append 1';$obj[] = 'Append 2';$obj[] = 'Append 3';print_r($obj);
上面的例子输出结果如下
bool(true)int(2)bool(false)string(7) "A value"obj Object( [container:obj:private] => Array ( [one] => 1 [three] => 3 [two] => A value [0] => Append 1 [1] => Append 2 [2] => Append 3 ))
学习了上面的例子,我们来个进阶版采用单例模式,这样我们的类就可以像全局变量一样四处横行了。
class Configuration implements ArrayAccess { static private $config; private $configarray; private function __construct() { // 初始化 $this->configarray = array("Binzy" => "Male", "Jasmin" => "Female"); } //实例话自身对象 public static function instance() { if (self::$config == null) { self::$config = new Configuration(); } return self::$config; } //检查一个偏移位置是否存在 function offsetExists($index) { return isset($this->configarray[$index]); } //获取一个偏移位置的值 function offsetGet($index) { return $this->configarray[$index]; } //设置一个偏移位置的值 function offsetSet($index, $newvalue) { $this->configarray[$index] = $newvalue; } //复位一个偏移位置的值 function offsetUnset($index) { unset($this->configarray[$index]); }}$config = Configuration::instance();print_r($config);echo "<br/>";echo $config['Binzy'];echo "<br/>";$config['Binzy'] = '1222';echo $config['Binzy'];
总的来说还是很简单的只有四个方法,很容易掌握,另外可以配合__call,__get,__set实现更多的高级功能。著名的yii框架就使用了ArrayAccess让对象可以像数组一样访问。
0 0
- PHP的ArrayAccess学习笔记
- PHP的ArrayAccess接口简介
- php的内置接口 arrayaccess
- PHP - ArrayAccess接口详解
- PHP ArrayAccess接口
- PHP中的ArrayAccess用法
- 231 php ArrayAccess
- PHP预定义接口ArrayAccess
- PHP的ArrayAccess接口 像数组一样来访问你的PHP对象
- PHP的ArrayAccess接口 像数组一样来访问你的PHP对象
- php如何使得你的对象可以像数组一样可以被访问(ArrayAccess 的作用)?
- 【php语法】实现ArrayAccess接口,以数组的形式访问对象
- PHP之ArrayAccess接口实例代码介绍
- PHP中的Iterator、ArrayAccess、Countable接口
- PHP ArrayAccess(数组式访问)接口
- PHP数组式访问接口 ArrayAccess
- PHP预定义接口之 ArrayAccess
- php数组式访问借口ArrayAccess
- 【Android】利用自定义View的重绘实现拖动移动,获取组件的尺寸
- 下拉刷新,上拉加载
- 二级界面隐藏TabBar
- 悟空学Linux专栏----第10篇
- PHP 上传文件大小限制
- PHP的ArrayAccess学习笔记
- memset函数使用详解
- 服务器采用JSON格式返回数据给安卓客户端
- Context-Dependent Pre-Trained Deep Neural Networks for Large-Vocabulary Speech Recognition
- Libevent参考手册:前言 (二)
- 查找(二)动态表查找
- Linux常用命令
- 关于Java获取子方法的新建实例引用的心得
- 悟空学Linux专栏----第11篇