根据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;
}
答案 0 :(得分:2)
这个提示的目的是减少方法的责任。 在这种特殊情况下,如果方法的功能是设置某种行为,则它不应具有任何默认值。默认值属于类定义或其构造函数。
您可以删除参数的默认值,并在定义类属性时设置它们。即:
public $useCache = true;
答案 1 :(得分:1)
您的示例有两种方法,每种方法都有两个职责:打开事物并关闭它。最好将每种方法拆分为仅赋予每个责任。示例:
public function setVerbose($flag);
成为
public function setVerboseOn();
public function setVerboseOff();