php - 在 PHP 中,如何在没有条件语句的情况下选择 3 个子类中的 1 个

标签 php oop conditional-statements

我有一个任务,需要输出 HondaBMWTesla 类的对象,所有这些都扩展了抽象类汽车。输出应基于用户输入的输入,但代码的任何部分都不允许使用条件语句(if-else、switch-case、三元)。

输入选项为“日本”、“德国”和“美国”,应分别输出本田、宝马或特斯拉的对象。

我最初所做的是尝试使用三元运算符,但我被告知要重新设计它,因为三元运算符仍然被认为是有条件的。

hon = new Honda;
bmw = new BMW;
tes = new Tesla;

newH = hon->objectify();
newB = bmw->objectify();
newT = tes->objectify();

myCar = newH ?: newB ?: newT;
return myCar;

这就是我所做的,其中 objectify() 基本上是一个由每个子类以不同方式实现的抽象函数,如果输入不匹配则返回 null,如果输入匹配则返回其自身的对象。

此提交被拒绝。请问有什么更好的方法可以完成这项工作?

最佳答案

您可以使用用户输入的值来查找要实例化的类,并使用数组从一个类映射到另一个类。例如:

$carTypes = array("Germany" => "BMW", "Japan" => "Honda", "America" => "Tesla");
$country = "Germany"; //replace this with actual user input, in your version

$car = new $carTypes[$country]();
$car->objectify();

演示:https://3v4l.org/0WSLO

另请参阅instantiate a class from a variable in PHP?

关于php - 在 PHP 中,如何在没有条件语句的情况下选择 3 个子类中的 1 个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73825686/

相关文章:

powershell - 从IF ELSE语句输出到管道

python - 根据应用于两个数据帧的条件创建第三个数据帧

php - php函数默认返回什么?

php - 使用 PHP 和 jQuery 显示 MySQL 数据

php - 如何使用一个布局页面制作多个页面? PHP

c++ - 引用不能为 NULL 或者它可以为 NULL?

c++ - 除了类(class)以外的所有人都是常数,有这样的事情吗?

javascript - 如何使用 if hasClass 条件禁用 jQuery mouseleave 事件?//悬停动画

PHPExcel CSV 到 XLSX

c - C语言的头文件和面向对象编程的可重用性?