Вы не можете использовать функции (включая конструкторы) в объявлениях членов класса.Вместо этого установите его в конструкторе для класса.
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
.