在 php5 中多了一系列新接口,在 haohappy 翻译的系列文章中,你可以了解到他们的应用,同时这些接口和一些实现的 class 被归为 standard php library(spl),在 php5 中加入了很多特性,使类的重载 (overloading) 得到进一步的加强,arrayaccess 的作用是使你的 class 看起来像一个数组 (php的数组),这点和 c# 的 index 特性很相似。
下面是 ArrayAccess 的定义:
interface ArrayAccess boolean offsetExists($index) mixed offsetGet($index) void offsetSet($index, $newvalue) void offsetUnset($index)
由于PHP的数组的强大,很多人在写 PHP 应用的时候经常将配置信息保存在一个数组里,于是可能在代码中到处都是 global,我们换种方式?
如以下代码:
<?php
//Configuration Class
class Configuration implements ArrayAccess {
static private $config;
private $configarray;
private function __construct() {
// init
$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 $config["Binzy"];
?>正如你所预料的,程序的输出是"Male",假如我们做下面那样的动作:
主要更新介绍: 完美整合Discuz!论坛,实现一站式登陆、退出、注册; 同步所有会员资料; 新增购物车功能,商品购买更加方便、快捷; 新增部分快捷菜单,网站访问更加方便; 限制首页商品、店铺标题显示长度; 修正会员后台管理不能更改密码的错误; 完善商品显示页面所有功能链接; 修正后台标签管理部分错误; 修正前台学校列表不按后台顺序显示的错误; 修正搜索功能中学校名称过长导致显示紊乱的现象; 修正
0
$config = Configuration::instance(); print $config["Binzy"]; $config['Jasmin'] = "Binzy's Lover"; // config 2 $config2 = Configuration::instance(); print $config2['Jasmin'];
是的,也正如预料的,输出的将是Binzy's Lover,也许你会问,这个和使用数组有什么区别呢?目的是没有区别的,但最大的区别在于封装,最基本的工作就是封装,而封装能有效将变化置于内部,也就是说,当配置信息不再保存在一个 PHP 数组中的时候,是的,应用代码无需任何改变,可能要做的,仅仅是为配置方案添加一个新的策略(Strategy)。
ArrayAccess 在进一步完善中,因为现在是没有办法 count 的,虽然大多数情况并不影响我们的使用.
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号