Альтернативой может быть использование методов доступа и личных данных:
class Address {
private $Street;
public function __construct() {}
public function setStreet($Street) {
$this->Street = $Street;
}
public function getStreet() {
return $this->Street;
}
}
/* ... same for Employee ... */
$myEmployee = new Employee();
$myEmployee->setAddress(new Address());
$street = $myEmployee->getAddress()->getStreet();
Это обеспечит вам инкапсуляцию на случай, если вам потребуется изменить внутреннюю реализацию позже. Если вы представляете своих учеников как общедоступных членов данных, вы блокируетесь, как только клиентский код начинает использовать ваши классы.
Рефакторинг будет проще, и это также избавит вас от предупреждений.