是否有可能获得父母调用子对象?

时间:2012-01-13 09:59:56

标签: php

以下代码:

 class a{

        public function __get($key) {
            if($key == 'obj') {
                if($b->obj == null) { //PSEUDO this is what I intend to do :)
                   $obj = new Obj();                        
                   $b->obj = $obj
                }
                return $obj;
            }
        }
    }

 class b extends a{

        private $obj = null;


        public function __get($key) {
            return parent::__get($key);
        }

    }

因此,我们的想法是按需创建对象。但我不知道是否有可能检测到调用parent :: _ get方法的对象的类。有些像小孩这样的操作员就是我想要的东西我想:)。

有可能但多余的是,例如我有一个名为Country的对象,所以我在我的类User中定义了一个Country对象,另一个类Location也有一个Country对象。这两个类都扩展了类a。我可以通过将a类中的if块写入每个子类来解决问题。但这就是我不想做的事情。因此,更容易在类中检查一个名为__get函数的类,并将所需的Country对象直接设置到子类中。我希望我的问题变得清晰,并不是太奇怪了。虽然我对任何其他解决方案持开放态度......谢谢。

2 个答案:

答案 0 :(得分:0)

如果你想知道__get()方法内部(通过 extends 在许多类之间共享),使用get_called_class调用它的对象的类是什么。

答案 1 :(得分:0)

http://codepad.org/Qnc938Wv

class a{

    public function __get($key) {
        if($key == 'obj') {
            if($this->_obj == null) { //PSEUDO this is what I intend to do :)
               echo "creating ";
               $obj = new StdClass();                        
               $obj->what = get_class($this);
               $this->_obj = $obj;
            }
            return $this->_obj;
        }
    }
}

class location extends a{
    protected $_obj = null;
    public function __get($key) {
        return parent::__get($key);
    }
}

class user extends a{
    protected $_obj = null;
    public function __get($key) {
        return parent::__get($key);
    }
}

$l = new location();
echo $l->obj->what . "\n";

$u = new user();
echo $u->obj->what . "\n";

echo $l->obj->what . "\n";
echo $u->obj->what . "\n";

这导致

creating location
creating user
location
user