这可能很简单,但我一直没有想出如何在Google上提出问题,所以我来试试:
我经常做这样的事情...
class foo {
private $bar = array();
}
...设置类属性为数组,但我想将一个私有属性改为对象,就像这样:
class foo {
private $bar = new stdClass();
}
我尝试了几种变化,但它们都没有起作用。这能做到吗?如果您能将私有属性分配给任何其他类对象,则可获得额外的奖励分数。
谢谢!
这可能很简单,但我一直没有想出如何在Google上提出问题,所以我来试试:
我经常做这样的事情...
class foo {
private $bar = array();
}
...设置类属性为数组,但我想将一个私有属性改为对象,就像这样:
class foo {
private $bar = new stdClass();
}
我尝试了几种变化,但它们都没有起作用。这能做到吗?如果您能将私有属性分配给任何其他类对象,则可获得额外的奖励分数。
谢谢!
在类成员声明中,您不能使用函数(包括构造函数)。相反,应在类的构造函数中设置。
class 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);
需要注意的是,这与属性的可见性无关... 这不受其protected
、private
或public
的影响。