PHPMD говорит, что нарушает принцип единой ответственности для аргумента, имеющего логическое значение по умолчанию

Эти два метода класса PHP нарушает Принцип единой ответственности (SRP) в соответствии с правило phpmd 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

Решение

Цель этой подсказки — уменьшить ответственность метода.
В этом конкретном случае, если функция метода состоит в том, чтобы установить какое-то поведение, у него не должно быть никакого значения по умолчанию. Значения по умолчанию принадлежат определению класса или его конструктору.

Вы можете просто удалить значения параметров по умолчанию и установить их при определении свойств класса. т.е .:

public $useCache = true;
1

Другие решения

В вашем примере есть два метода, каждый с двумя обязанностями: включить и выключить. Лучше разделить каждый метод, чтобы дать каждому только ответственность. Пример:

public function setVerbose($flag);

становится

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