Используйте класс в качестве атрибута другого класса

Я хотел бы создать класс с экземпляром другого класса, используемого в качестве атрибута. Что-то вроде этого:

class person
{
    var $name;
    var $address;
}

class business
{
    var $owner = new person();
    var $type;
}

Это, конечно, не работает, и я попробовал несколько вариантов. Все, что я нашел в поиске Google, ссылается только на определения вложенных классов (class a { class b{ } }).

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

3 ответа

Решение

Можно попробовать использовать вот так, если вы хотите вызвать другой метод класса:

class person
{
    public $name;
    public $address;
}

class business {
 public $owner;
    function __construct( $obj ) {
        $this->owner = $obj;
    }

}   
$a = new person();
$b = new business($a);

Вы не можете инициализировать классы как часть объявления атрибута / свойства / поля.

Из документации по свойствам PHP:

Объявление [Property] может включать в себя инициализацию, но эта инициализация должна быть постоянным значением, то есть она должна быть в состоянии быть оцененной во время компиляции и не должна зависеть от информации времени выполнения для оценки.

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

class business {
    public $owner;

    public function __construct() {
        $this->owner = new person();
    }
}

Кроме того, обязательно используйте ключевые слова видимости (public, protected, private) скорее, чем var,

class person
{
    public $name;
    public $address;
}

class business
{
    public $owner;
    public $type;

    public function __construct()
    {
        $this->owner = new person();
    }
}
Другие вопросы по тегам