Из PHP manual on class properties (курсив мой):
Переменные элемента класса называются «свойствами». Вы также можете увидеть, как они ссылаются на другие термины, такие как «атрибуты» или «поля», но для целей этой ссылки мы будем использовать «свойства». Они определяются с использованием одного из ключевых слов public, protected или private, за которым следует объявление нормальной переменной. Это объявление может включать инициализацию, но эта инициализация должна быть постоянным значением - то есть она должна быть способна быть оценена во время компиляции и не должна зависеть от информации о времени выполнения для оценки.
Либо создать его внутри конструктора (composition)
class Foo
{
protected $bar;
public function __construct()
{
$this->bar = new Bar;
}
}
inject или это в конструкторе (aggregation)
class Foo
{
protected $bar;
public function __construct(Bar $bar)
{
$this->bar = $bar;
}
}
или использовать сеттер инъекции.
class Foo
{
protected $bar;
public function setBar(Bar $bar)
{
$this->bar = $bar
}
}
Вы хотите favor aggregation over composition.
Агрегация также известна как «Инъекция зависимостей», а Фабьен Потенчер имеет здесь учебник: http://fabien.potencier.org/article/11/что-это-зависимость инъекции –