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

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

Я попробовал:

 public $objectname = new $Object();

Но это не работало. Кроме того, почему необходимо сделать это как этот?

Разве это не лучше, чтобы просто инстанцировать того объекта и просто использовать его участников?

17
задан Tim Post 30 November 2011 в 09:31
поделиться

3 ответа

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

Переменные-члены класса называются «свойствами». Вы также можете увидеть, как они упоминаются с использованием других терминов, таких как «атрибуты» или «поля», но для целей этой ссылки мы будем использовать «свойства». Они определяются с помощью одного из ключевых слов public, protected или private, за которым следует обычное объявление переменной. Это объявление может включать в себя инициализацию, но эта инициализация должна быть постоянным значением - то есть, она должна иметь возможность оцениваться во время компиляции и не должна зависеть от информации времени выполнения для оценки .

Либо создайте его внутри конструктора ( композиция )

class Foo
{
    protected $bar;
    public function __construct()
    {
        $this->bar = new Bar;   
    }
}

, либо введите в конструктор ( агрегация )

class Foo
{
    protected $bar;
    public function __construct(Bar $bar)
    {
        $this->bar = $bar;   
    }
}

или используйте внедрение установщика.

class Foo
{
    protected $bar;
    public function setBar(Bar $bar)
    {
        $this->bar = $bar
    }
}

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

27
ответ дан 30 November 2019 в 12:50
поделиться

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

$objectname = new stdClass;

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

1
ответ дан 30 November 2019 в 12:50
поделиться

PHP не поддерживает явную типизацию класса члены. Таким образом, вы не можете сказать:

public Object $objectname;

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

 public $objectname = new Object();
0
ответ дан 30 November 2019 в 12:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: