2

我想达到这个效果:

class Foo {
   public $bar; // array('aaa' => array('bbb' => 'ccc'))
   public function __get($value)
   {
      return $this->bar[...][key($value)]; // don't know what to implement here
   }
}

$obj = new Foo();
$obj->aaa['bbb']; // should return 'ccc'

这可能吗?我怎样才能做到这一点?

如果我想以这种方式调用它,如何从 __get() 方法内部的 Foo::$bar 数组中获取 'ccc' 值?

4

4 回答 4

4

尝试这个:

<?php
class Foo {
    public $bar = array('aaa' => array('bbb' => 'ccc'));
    public function __get($value) {
        return $this->bar[$value];
    }
}

$obj = new Foo();
echo $obj->aaa['bbb'];

将返回:

ccc
于 2012-11-29T15:03:19.007 回答
1
<?php

class Foo 
{
    // note you had: array('aaa' => array('bbb', 'ccc'));
    // so `bbb` and `ccc` were values, not keys.
    public $bar = array('aaa' => array('bbb' => 'ccc'));

    public function __get($name)
    {
        return $this->bar[$name];
    }
}

$obj = new Foo();
echo $obj->aaa['bbb']; // should return 'ccc'

// output: ccc
于 2012-11-29T15:03:54.337 回答
1
class Foo {
   public $bar = array('aaa' => array('bbb' => 'ccc'));
   public function __get($value)
   {
      return $this->bar[$value];
   }
}

$obj = new Foo();
var_dump($obj->aaa['bbb']);

编辑后得到你想要的。

于 2012-11-29T14:58:39.213 回答
1

不确定你是如何表达这个问题的,但我认为这可能是你要找的?

<? 
class Foo {
    function __construct(){
        $bar = array(
            'aaa' => array('bbb' => 'ccc'),
            'zzz' => array('yyy' => 'xxx'),
        );
        foreach($bar as $key => $value){
            $this->{$key} = $value;
        }
    }
    public function __get($value){
        // return $this->bar[...][key($value)]; // don't know what to implement here
    }
}

$obj = new Foo();
echo $obj->aaa['bbb']; // ccc
echo $obj->zzz['yyy']; // xxx
于 2012-11-29T15:05:51.920 回答