ArrayObject扩展的应用示例代码

原创
2016-06-21 08:58:07 939浏览
Zend_Config很好用,我比较喜欢它的数组形态,其实ArrayObject也可以做同样的事情

$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所有的可用方法


/**
* 将数组转换为对像形态使用
*
* @package core
* @author Akon(番茄红了)
* @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)
{
$this->offsetUnset($index);
}

/**
* 将数据信息转换为数组形式
*
* @return array
*/
public function toArray()
{
$array = $this->getArrayCopy();
foreach ($array as &$value)
($value instanceof self) && $value = $value->toArray();
return $array;
}

/**
* 将数据组转换为字符串形式
*
* @return array
*/
public function __toString()
{
return var_export($this->toArray(), true);
}

}



声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。