日期:2012-07-03  浏览次数:20387 次

Zend_Config很好用,我比较喜欢它的数组形态,其实ArrayObject也可以做同样的事情
<?php
$config = array(
    'db' => array (
        'adapter' => 'mysql',
        'config' => array (
            'host' => 'localhost',
            'port' => '3306',
            'dbname' => 'mydbname',
            'username' => 'dbuser',
            'password' => 'dbpassword',
            'charset' => 'utf8',
            'prefix' => '',
        ),
    ),
);
$config = new Zend_Config($config);
echo $config->db->adapter;
foreach ($config->db->config as $k => $v) {
    echo "$k | $v \n";
}
echo count($config);
//... 甚至其他更多的方法

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

<?php
 
/**
 * 将数组转换为对像形态使用
 *
 * @package    core
 * @author     Akon(番茄红了) <aultoale@gmail.com>
 * @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->offsetGet($index);
    }
 
    /**
     * 使用魔术方法修改指定 name 的值
     *
     * @param string  $index
     * @param mixed   $value
     */
    public function __set($index, $value)
    {
        $this->offsetSet($index, $value);
    }
 
    /**
     * 通过魔术方法判断数据是否已被设置
     *
     * @param string  $index
     * @return boolean
     */
    public function __isset($index)
    {
        return $this->offsetExists($index);
    }
 
    /**
     * 通过魔术方法删除数据
     *
     * @param string  $index
     */
    public function __unset($index)
    {