3

根据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;
}
4

2 回答 2

3

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

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

public $useCache = true;
于 2016-04-14T16:12:45.847 回答
2

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

public function setVerbose($flag);

变成

public function setVerboseOn();
public function setVerboseOff();
于 2018-10-03T10:30:06.193 回答