2010-02-04 7 views
14

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

Я пробовал:

public $objectname = new $Object(); 

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

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

ответ

24

Из 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.

+2

Агрегация также известна как «Инъекция зависимостей», а Фабьен Потенчер имеет здесь учебник: http://fabien.potencier.org/article/11/что-это-зависимость инъекции –

1

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

public Object $objectname; 

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

public $objectname = new Object(); 
+2

это приведет к фатальной ошибке: «Постоянное выражение содержит недопустимые операции» – hassan

1

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

$objectname = new stdClass; 

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

Смежные вопросы