Возможный дубликат:
Любой способ указать дополнительные значения параметра в PHP?
просто случайно натолкнулся на это.
Если у меня есть такая функция:
public function getSomething($orderBy='x', $direction = 'DESC', $limit=null){ //do something random }
При вызове функции можно игнорировать первые два поля и оставить их по умолчанию, но указать третью.
Например:
$random = $this->my_model->getSomething(USE_DEFAULT, USE_DEFAULT, 10);
Я знаю, что могу передать 1-й и 2-й параметры, но все они спрашивают, является ли это своеобразным специальным ключевым словом, которое просто использует значение по умолчанию.
Надеюсь, это имеет смысл. это не проблема, просто любопытно.
Спасибо за прочтение
Вы должны сделать это сами. Вы можете использовать значение null
чтобы указать, что должно использоваться значение по умолчанию:
public function getSomething($orderBy = null, $direction = null, $limit = null) { // fallbacks if ($orderBy === null) $orderBy = 'x'; if ($direction === null) $direction = 'DESC'; // do something random }
Затем передайте null
при вызове, чтобы указать, что вы хотите использовать значения по умолчанию:
$random = $this->my_model->getSomething(null, null, 10);
Другим возможным решением, которое я иногда использую, является дополнительный параметр в самом конце списка параметров, содержащий все необязательные параметры:
public function foo($options = array()) { // merge with defaults $options = array_merge(array( 'orderBy' => 'x', 'direction' => 'DESC', 'limit' => null ), $options); // do stuff }
Таким образом, вам не нужно указывать все необязательные аргументы. array_merge()
гарантирует, что вы всегда имеете дело с полным набором опций. Вы бы использовали его так:
$random = $this->my_model->foo(array('limit' => 10));
Кажется, что в этом конкретном случае нет требуемого параметра, но если вам это нужно, просто добавьте его перед дополнительными:
public function foo($someRequiredParameter, $someOtherRequiredParameter, $options = array()) { // ... }
Честно говоря, это становится проблемой, когда функции пытаются сделать слишком много. Там почти всегда лучший шаблон дизайна, когда вы видите, что функция вырастает до нескольких параметров (обычно это бедный парень, унаследовавший старый код, и добавление параметров – это самый быстрый способ «выполнить задание»).
Ответ Elusive является лучшим в соответствии с вашим вопросом, но посмотрите на цикломатическую сложность: http://en.wikipedia.org/wiki/Cyclomatic_complexity
Это хороший способ узнать, делает ли ваша функция слишком много, что делает ваш вопрос менее проблемным, чем сейчас.
Я не думаю, что PHP может это сделать. Самое лучшее решение, о котором я знаю, описано здесь: http://www.php.net/manual/en/functions.arguments.php#70511
Вы не можете игнорировать параметры. Но вы можете сделать что-то вроде этого:
public function getSomething($limit=null){ return $this->getSomething('x','DESC',$limit); } public function getSomething($orderBy='x', $direction = 'DESC', $limit=null){ ... }
до встречи