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


PHPMD says violating Single Responsibility Principle for argument having boolean default value

根据phpmd规则booleanargumentflag,这两个PHP类方法违反了单一职责原则(SRP)。

应该如何编写以避免这种情况?

如果解决方案是删除默认值"= 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;
}

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

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

public $useCache = true;

您的示例有两个方法,每个方法都有两个职责:打开和关闭。最好分割每个方法,只给每个方法一个职责。例子:

public function setVerbose($flag);

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