#php #inheritance #polymorphism
#php #наследование #полиморфизм
Вопрос:
В этом примере foreach всегда будет выводить 'I am Vehicle'
и никогда 'I am Car'
или 'I am Bus'
.
Как добиться того, чтобы я получал выходные данные, связанные с типом класса?
Так Car
что должен выводиться 'I am Car'
, Bus
должен выводиться 'I am Bus'
и т. Д…
class Vehicle {
public function getName(){
return 'I am Vehicle';
}
}
class Car extends Vehicle {
public function getName(){
return 'I am Car';
}
}
class Bus extends Vehicle {
public function getName(){
return 'I am Bus';
}
}
$vehicles = fetchAllVehicles();
foreach( $vehicles as $v){
echo $v->getName();
}
Комментарии:
1. Похоже, что выборка всех транспортных средств возвращает объекты транспортных средств, а не автомобили или автобусы. Вы должны создать экземпляр правильного подкласса, и это сработает.
2. Тогда проще определить атрибут
type
и иметь только один getName() в родительском классе, который проверяетtype
и возвращает значение… но почему тогда ООП 🙂 ?3. Если у вас нет контроля над созданием экземпляра объекта, это сработает.