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

#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. Если у вас нет контроля над созданием экземпляра объекта, это сработает.