ArrayObject扩展的应用示例代码

作者:网络 来源:佚名 更新时间:2008-09-16 14:48:39 点击:
zend_config很好用,我比较喜欢它的数组形态,其实arrayobject也可以做同样的事情
<?php
$config = array(
    'db' => array (
        'adapter' =&gt; 'mysql',
        'config' =&gt; array (
            'host' =&gt; 'localhost',
            'port' =&gt; '3306',
            'dbname' =&gt; 'mydbname',
            'username' =&gt; 'dbuser',
            'password' =&gt; 'dbpassword',
            'charset' =&gt; 'utf8',
            'prefix' =&gt; '',
        ),
    ),
);
$config = new zend_config($config);
echo $config-&gt;db-&gt;adapter;
foreach ($config-&gt;db-&gt;config as $k =&gt; $v) {
    echo "$k | $v \n";
}
echo count($config);
//... 甚至其他更多的方法

下面的扩展,通过几个魔术方法,不仅可以实现zend_config可以做到的事情,还可以继承array_object所有的可用方法

<?php
 
/**
 * 将数组转换为对像形态使用
 *
 * @package    core
 * @author     akon(番茄红了) &lt;[email protected]>
 * @copyright copyright (c) 2008 (http://www.tblog.com.cn)
 * @license    http://www.gnu.org/licenses/gpl.html     gpl 2
 */
class extend_arrayobject extends arrayobject
{
 
    /**
     * 构造方法
     *
     * @param array  $array
     */
    public function __construct(array $array = array())
    {
        foreach ($array as &$value)
            is_array($value) && $value = new self($value);
        parent::__construct($array);
    }
 
    /**
     * 使用魔术方法通过指定 name 获取值
     *
     * @param string  $index
     * @return mixed
     */
    public function __get($index)
    {
        return $this-&gt;offsetget($index);
    }
 
    /**
     * 使用魔术方法修改指定 name 的值
     *
     * @param string  $index
     * @param mixed   $value
     */
    public function __set($index, $value)
    {
        $this-&gt;offsetset($index, $value);
    }
 
    /**
     * 通过魔术方法判断数据是否已被设置
     *
     * @param string  $index
     * @return boolean
     */
    public function __isset($index)
    {
        return $this-&gt;offsetexists($index);
    }
 
    /**
     * 通过魔术方法删除数据
     *
     * @param string  $index
     */
    public function __unset($index)
    {
        $this-&gt;offsetunset($index);
    }
 
    /**
     * 将数据信息转换为数组形式
     *
     * @return array
     */
    public function toarray()
    {
        $array = $this-&gt;getarraycopy();
        foreach ($array as &$value)
            ($value instanceof self) && $value = $value-&gt;toarray();
        return $array;
    }
 
    /**
     * 将数据组转换为字符串形式
     *
     * @return array
     */
    public function __tostring()
    {
        return var_export($this-&gt;toarray(), true);
    }
 
}
,欢迎访问网页设计爱好者web开发。