【问题标题】:Handling similar classes without conditional statements?在没有条件语句的情况下处理类似的类?
【发布时间】:2019-07-13 00:35:27
【问题描述】:

所以我得到了一项任务,要创建一个显示各种项目列表的网站。它们共享一些属性,例如名称,但每个都具有独特的属性,例如尺寸或重量。由于这是 OOP 中的一个练习,因此可以将其拆分为包含公共属性的父类,并且每个项目都有一个扩展该父类的类。

部分任务是制作一个动态表单来添加一个项目,该表单应该根据选择的项目类型而改变。问题是赋值明确声明不使用条件语句来决定选择哪种形式。

我制作了表单,但使用一个简单的 switch 语句来决定要加载什么动态表单。

switch ($_POST['thing']) {
    case 'thing1':
        require '../views/thing1.php';
        break;
    case 'thing2':
        require '../views/thing2.php';
        break;
}

我知道各种 OOP 设计模式,但似乎没有一个真正适合我的想法。那么,如果不为 100 种不同的项目设置一个巨大的条件,如何做到这一点呢?

【问题讨论】:

  • thing1thing2 是类的名称吗?您可以使用new $_POST['thing']。但是您需要将这些值列入白名单。
  • @Barmar 目前它们只是 html 的硬编码位。

标签: php oop design-patterns


【解决方案1】:

由于包含文件的名称与$_POST['thing']的值相同,因此可以计算文件名。

$valid_things = ['thing1', 'thing2'];
if (in_array($_POST['thing'], $valid_things)) {
    require "../views/{$_POST['thing']}.php";
} else {
    die("Invalid thing");
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-04
    • 1970-01-01
    • 2015-04-07
    • 1970-01-01
    • 1970-01-01
    • 2021-11-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多