Как было сказано ранее , ничего не изменилось. Помните, что слишком много параметров (особенно факультативных) - сильный индикатор запаха кода.
Возможно, ваша функция слишком много:
// first build context
$dataFetcher->setPage(1);
// $dataFetcher->setPageSize(50); // not used here
// then do the job
$dataFetcher->getData('some name');
Некоторые параметры могут быть сгруппированы логически:
$pagination = new Pagination(1 /*, 50*/);
getData('some name', $pagination);
// Java coders will probably be familiar with this form:
getData('some name', new Pagination(1));
В крайнем случае вы всегда можете ввести ad-hoc объект параметра :
$param = new GetDataParameter();
$param->setPage(1);
// $param->setPageSize(50); // not used here
getData($param);
(который является просто прославленным версия менее формального метода массива параметров )
Иногда сама причина для создания параметра необязательна. В этом примере $page
действительно означает, что это необязательно? Сохраняет ли несколько символов действительно значение?
// dubious
// it is not obvious at first sight that a parameterless call to "getData()"
// returns only one page of data
function getData($page = 1);
// this makes more sense
function log($message, $timestamp = null /* current time by default */);