格式化条件 if else if 并且只使用一次里面的方法

format condition if else if and use the method inside only one time

我正在开发一个应用程序,在部分代码中,我认为这看起来很难看,实际上我调用了一个 API 来检索数组的数组,并且我使用一个变量来确定如果我需要调用 table 的所有元素或特定元素,那么这里是

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 并考虑条件条件?

您可以很容易地组合这些条件,只要理解在 !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);
        }
    }
}

事实上,您可以更简洁地获得 single-statement 圣杯:

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

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