以下代码:
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对象直接设置到子类中。我希望我的问题变得清晰,并不是太奇怪了。虽然我对任何其他解决方案持开放态度......谢谢。
答案 0 :(得分:0)
如果你想知道__get()方法内部(通过 extends 在许多类之间共享),使用get_called_class调用它的对象的类是什么。
答案 1 :(得分:0)
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