【问题标题】:format condition if else if and use the method inside only one time格式化条件 if else if 并且只使用一次里面的方法
【发布时间】:2021-02-06 01:35:11
【问题描述】:

我正在开发一个应用程序,并且在部分代码中,我认为这对我来说很丑陋,实际上我调用了一个 API 来检索一个数组数组,并且我使用一个变量来确定我是否需要调用表格的所有元素或特定元素上,所以这里是

foreach ($this->projects['projects'] as $project) {
    if (is_array($project)) {
        if (!isset($type_project)) {  
            $this->_doProcess($project);
        } 
        elseif (isset($type_project) && ($type_project == $project['type_projet'])){
            $this->_doProcess($project);
        }
    }
}

有没有一种方法可以一次性调用 doProcess 方法并考虑条件条件?

【问题讨论】:

  • 您的循环中没有定义$type_project,这使得您的条件来源变得神秘。我已经修复了您代码中的缩进,这是朝着更好看的代码迈出的第一步。
  • 你可以这样做: if(!isset($type_project) || ($type_project == $project['type_project'])){...调用你的函数...}

标签: php arrays code-formatting


【解决方案1】:

您可以很容易地组合条件,并理解在!isset($x) || ... 之后评估的任何内容都将具有isset($x) 作为给定。如下:

foreach ($this->projects['projects'] as $project) {
    if (is_array($project)) {
        if (!isset($type_project) || $type_project == $project['type_projet'])) {
            $this->_doProcess($project);
        }
    }
}

您也可以将is_array 放入相同的评估中,但这会使阅读变得更加迟钝,而且据我所知,您的担忧仅仅是消除了额外的_doProcess()。在任何情况下,只要清楚说明选项即可:

foreach ($this->projects['projects'] as $project) {
    if (is_array($project) && (!isset($type_project) || $type_project == $project['type_projet']) ) {
            $this->_doProcess($project);
        }
    }
}

事实上,你可以更简洁地为单语句圣杯评分:

foreach ($this->projects['projects'] as $project) {
    is_array($project) 
        && (!isset($type_project) || $type_project == $project['type_projet']) 
        && $this->_doProcess($project);
}

我发现上面的内容实际上很可读,当分成三行时更是如此,但群众可能会不同意这是否是好的做法......我发现自己偶尔会这样做。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    相关资源
    最近更新 更多