zend framework里面的"->"连续使用的问题

最近学习zend框架,

 

// 给出一个配置数据的数组
$configArray = array(
    'webhost'  => 'www.example.com',
    'database' => array(
        'adapter' => 'pdo_mysql',
        'params'  => array(
            'host'     => 'db.example.com',
            'username' => 'dbuser',
            'password' => 'secret',
            'dbname'   => 'mydatabase'
        )
    )
);

// 基于配置数据创建面向对象的 wrapper
$config = new Zend_Config($configArray);

// 输出配置数据 (结果在'www.example.com'中)
echo $config->webhost;

// 使用配置数据来连接数据库
$db = Zend_Db::factory($config->database->adapter,
                       $config->database->params->toArray());

// 另外的用法:简单地传递 Zend_Config 对象。
// Zend_Db factory 知道如何翻译它。
$db = Zend_Db::factory($config->database);

 

 

发现了很多诸如

$config->database->adapter

 

此类访问的现象。$config是对象,但是database和adapter不是对象,但是怎么用到了"->"符号呢?

怀着探索的精神,阅读了一下congfig.php和ini.php,很多函数就不是很明白,看了一天晕乎乎的。晚上自己把原始类复制过来,自己加数据测试,终于发现了原因。

 

class test{
 protected $data;
 public function  __construct(array $array){

  foreach ($array as $key => $value) {
   if (is_array($value)) {
    $this->data[$key] = new self($value);
   } else {
    $this->data[$key] = $value;
   }
  }

 }
    public function get($name, $default = null)
 {
  $result = $default;
  if (array_key_exists($name, $this->data)) {
   $result = $this->data[$name];
  }
  return $result;
 }
 
public function __get($name)
 {
  return $this->get($name);
 }
}
$array["general"]=array("name"=>"tom","sex"=>"male");

$test=new test($array);
print_r($test);

echo $test->general->name;

 

 

打印出的$test 是

 

test Object
(
    [data:protected] => Array
        (
            [general] => test Object
                (
                    [data:protected] => Array
                        (
                            [name] => tom
                            [sex] => male
                        )

                )

        )

)

里面其实主要原理是用到了魔术方法__get(),当 $test->general->name去访问时发现没有general这个成员,它就自动调用魔术方法,这样$test->general就返回了一个 test Object,然后继续->name就自然明白了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值