Используйте класс в качестве атрибута другого класса
Я хотел бы создать класс с экземпляром другого класса, используемого в качестве атрибута. Что-то вроде этого:
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();
}
}