是否将整个函数体内的if语句视为不良实践?

时间:2018-01-24 10:46:26

标签: php

我经常发现自己编写的函数看起来像:

public function foo($param): void 
{
    if($param) {
        //do something
    }
}

如果$param变为false,则不执行代码。

这看起来是一种不好的做法,是否有关于如何避免这种编码的指导方针/模式?

5 个答案:

答案 0 :(得分:1)

您可以改善这样的功能:

function foo($param='defaultValue') 
{
    if($param)
    {
        //do something

        return true; // or something else
    }

    return false; // by default return false
}

通过这样做,如果将$param评估为false,则会使用return false

此外,如果您的函数位于类中,最佳做法是为该函数指定访问修饰符(publicprotectedprivate)。

答案 1 :(得分:1)

access modifiers添加到功能

必须将类属性定义为public,private或protected。如果使用var声明,则该属性将被定义为public。

public function foo($param=null) 
{
    /* Condition while not empty then proceed */
    if(!empty($param)) {
        //do something
    } else {

        return false;
    }
}

答案 2 :(得分:0)

这取决于你想对这个功能做什么。 但我的意见是你的条件应该在函数之外,例如

function foo() {
    // doing something
}

然后

if ($params) {
    foo();
}

它看起来更可定制

答案 3 :(得分:0)

如果一个函数是全有或全无条件,我首先得到else条件 - 这样,如果$param解析为false,函数会立即退出:

public function foo($param): void 
{
    if(!$param) {
        return;
    }
    //do something
}

答案 4 :(得分:0)

我个人将此代码更改为:

function foo($param) 
{
    $param 
      && (function () {
        // Do code here.
      })();
}

但是如果我想在其他地方调用内部函数并保持一切清洁,我可能会将其重构为:

function foo($param) 
{
  $param
    && bar();
}

function bar() 
{
  // Do code here
}

然后我会调整foo的命名,以明确它是bar的包装并重命名bar,这样听起来就像它{39} ; s缺少包装器,可能是action_onlyaction_without_foo

然后我也会在每个函数的dochints中写出来,在OOP中这将是一个私有方法,但是这并没有强制实现真正的隐私,请参阅:What is the point of OOP visibility in PHP when Closures and Reflections are available?,in事实上,在第一个例子中,函数内部的闭包更多是私有的"在技​​术层面