这可能很简单,但是我无法弄清楚如何对Google的问题进行说明,所以这里:
所以,我经常做这样的事情
class foo { private $bar = array(); }
…将某些类属性设置为数组.但是,我想使一个私人财产成为一个对象,而这样的东西:
class foo { private $bar = new stdClass(); }
我尝试了几个这样的变化,没有一个工作.这可以做吗对于奖金积分,您可以将私有财产分配为任何其他类别的对象吗?
谢谢!
您不能在类成员声明中使用函数(包括构造函数).而是在类的构造函数中设置它.
原文链接:/php/139301.htmlclass Foo { private $bar; private $baz; public function __construct() { $this->bar = new stdClass(); $this->baz = new Bat(); } public function __get($key) { if(isset($this->$key) { return $this->$key; } throw new Exception(sprintf('%s::%s cannot be accessed.',__CLASS__,$key)); } } $foo = new Foo(); var_dump($foo->bar); var_dump($foo->bat);
当你扩展类并需要覆盖构造函数,但是仍然希望在父类构造函数中的东西:
class FooExtended { protected $coolBeans; public function __construct() { parent::__construct(); // calls the parents constructor $this->coolBeans = new stdClass(); } } $foo = new FooExtended(); var_dump($foo->bar); var_dump($foo->bat); var_dump($foo->coolBeans);
还应该注意的是,这与属性的可见性无关,无论是受保护的,私有的还是公共的.