Когда у меня есть Car
экземпляр, который расширяет VehicleType
abstract class VehicleType {
}
class Car extends VehicleType {
}/**
* @var VehicleType $vehicleType
*/
private $vehicleType;
И $vehicleType
переменная может быть любым экземпляром VehicleType
и я хочу сделать функцию переключения на это, как это:
$vehicleType = new Car();
switch (is_a($vehicleType, get_class($vehicleType))) {
...
}
По какому параметру прослушивает функция переключения? Могу ли я сделать что-то вроде этого сейчас:
switch (is_a($vehicleType, get_class($vehicleType))) {
case "Car": {
//Its now a Car
}
case "Motorcyle": {
//Its now a motorcycle
}
//etc
}
Ты нуждаешься в этом:
switch (get_class($vehicleType))) { //it will get class name of $vehicleType
case "Car": { //match if $vehicleType is Car
//Its now a Car
break;
}
case "Motorcyle": { //match if $vehicleType is Motorcyle
//Its now a motorcycle
break;
}
//etc
}
is_a возвращает логическое значение, поэтому вам нужно выполнить проверку if-else.
Как это:
if (is_a($vehicleType, "Car")) {
//It's now a Car
} else if (is_a($vehicleType, "Motorcyle")) {
//It's now a motorcycle
} else {
//It's something else
}