PHPMD表示违反单一责任原则的参数具有布尔默认值

时间:2015-09-16 08:09:24

标签: php code-structure code-standards phpmd

根据Single Responsibility Principle (SRP),这两个PHP类方法违反了phpmd rule booleanargumentflag

如何编写它们以避免这种情况?

如果解决方案是删除默认值" = true",那么这是如何改进代码的呢?

/**
 * Set verbose mode.
 *
 * @param boolean $mode true or false to enable and disable verbose mode,
 *                      default is true.
 *
 * @return $this
 */
public function setVerbose($mode = true)
{
    $this->verbose = $mode;
    return $this;
}


/**
 * Use cache or not.
 *
 * @param string $use true or false to use cache.
 *
 * @return $this
 */
public function useCache($use = true)
{
    $this->useCache = $use;
    return $this;
}

2 个答案:

答案 0 :(得分:2)

这个提示的目的是减少方法的责任。 在这种特殊情况下,如果方法的功能是设置某种行为,则它不应具有任何默认值。默认值属于类定义或其构造函数。

您可以删除参数的默认值,并在定义类属性时设置它们。即:

public $useCache = true;

答案 1 :(得分:1)

您的示例有两种方法,每种方法都有两个职责:打开事物并关闭它。最好将每种方法拆分为仅赋予每个责任。示例:

public function setVerbose($flag);

成为

public function setVerboseOn();
public function setVerboseOff();