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); } /** * マジックメソッドを使用して名前を指定して値を取得します * * @param string $index * @returnmixed */ public function __get($index) { return $this->offsetGet ($index); } /** * マジックメソッドを使用して指定された名前の値を変更します * * @param string $index * @parammixed $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); } }
|