在 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。我们换种方式?
如以下代码:
//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"。
假如我们做下面那样的动作:
$config = Configuration::instance();
print $config["Binzy"];
$config['Jasmin'] = "Binzy's Lover";
// config 2
$config2 = Configuration::instance();
print $config2['Jasmin'];
是的,也正如预料的,输出的将是Binzy's Lover。
也许你会问,这个和使用数组有什么区别呢?目的是没有区别的,但最大的区别在于封装。OO 的最基本的工作就是封装,而封装能有效将变化置于内部。也就是说,当配置信息不再保存在一个 PHP 数组中的时候,是的,应用代码无需任何改变。可能要做的,仅仅是为配置方案添加一个新的策略(Strategy)。:
ArrayAccess 在进一步完善中,因为现在是没有办法 count 的,虽然大多数情况并不影响我们的使用。
参考:
1. 《PHP5 Power Programming》
2. 《设计模式》
3. 《面向对象分析与设计》
茶杯头甜蜜终章dlc 官方手机版v1.0.0.3
下载火柴人传说暗影格斗内置菜单 最新版v3.0.1
下载荒野乱斗测试服 安卓版v61.10.3
下载荒野乱斗彩虹服 安卓版v61.10.3
下载寒霜启示录 安卓版v1.25.10
寒霜启示录是一款生存模拟游戏,不少玩家可能对于末日都有着自己
末日城堡免广告版 安卓最新版v0.7.1
末日城堡免广告版是一款非常好玩的模拟经营类游戏,内部可以不看
甜蜜人生模拟器 最新版v1.4.5
甜蜜人生模拟器是一款非常好玩的模拟恋爱手游,玩家在这里能够对
武器锻造师内置功能菜单 v10.4
武器锻造师内置菜单版是游戏的破解版本,在该版本中为玩家提供了
开放空间overfield 安卓版v1.0.5
开放空间Overfield是一款箱庭养成经营手游,让你在广阔