Объявлять свойство как объект?

Как вы объявляете свойство класса как объект?

Я пробовал:

 public $objectname = new $Object();

Но это не сработало. Кроме того, зачем вам это делать?

Не лучше ли просто создать экземпляр этого объекта и просто использовать его элементы?

Ответы

Ответ 1

Из руководства руководства по свойствам класса (выделено мной):

Переменные члена класса называются "свойствами". Вы также можете увидеть, как они ссылаются на другие термины, такие как "атрибуты" или "поля", но для целей этой ссылки мы будем использовать "свойства". Они определяются с использованием одного из ключевых слов 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
    }
}

Вы хотите поддерживать агрегацию над композицией.

Ответ 2

PHP не поддерживает явное типирование членов класса. Поэтому вы не можете сказать:

public Object $objectname;

Если класс Object существует, и вы хотите его экземпляр, попробуйте:

 public $objectname = new Object();

Ответ 3

Если вы просто хотите создать экземпляр класса, который вы можете сделать:

$objectname = new stdClass;

Я не верю, что вы можете сделать это в объявлении свойства, поэтому вам нужно просто объявить $objectname и в конструкторе установить его в новый stdClass.