|
![]() |
名片设计 CorelDRAW Illustrator AuotoCAD Painter 其他软件 Photoshop Fireworks Flash |
|
在 PHP5 中多了一系列新接口。在 HaoHappy 翻译的系列文章中 你可以了解到他们的应用。同时这些接口和一些实现的 Class 被归为 Standard PHP Library(SPL)。在 PHP5 中加入了很多特性,使类的重载 (Overloading) 得到进一步的加强。ArrayAccess 的作用是使你的 Class 看起来像一个数组 (PHP的数组)。这点和 C# 的 Index 特性很相似。 下面是 ArrayAccess 的定义:
由于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. 《面向对象分析与设计》 您可以通过 binzywu at gmail dot com 与作者联系。 注:本文章为原创文章,版权归文章作者与超越PHP网站所有,未经本站同意,禁止任何商业转载。非盈利网站及个人网站转载请注明出处,谢谢合作! 返回类别: 教程 上一教程: 图片上传的一个例子 下一教程: Linux 下的 Apache+JServ+ojsp+SSL+PHP(IMAP+LDAP+MYSQL) 的安装(转二) 您可以阅读与"ArrayAccess接口介绍"相关的教程: · 用PHP来写记数器(具体介绍) · 不使用OCI8接口如何连接PHP和Oracle · PHP-GTK 介绍及其应用 · PHP4 的新函数介绍 - 输出信息控制函数 · WML,Apache,和 PHP 的介绍 |
![]() ![]() |
快精灵印艺坊 版权所有 |
首页![]() ![]() ![]() ![]() ![]() ![]() ![]() |