Intereting Posts
получить ответ сервера без использования setinterval для chat applaton php jquery PHP – Проблемы с удалением «\ r \ n \ r \ n» из этой строки: «Я хотел бы: \ r \ n \ r \ n1.) Сбросить этот беспорядок \ r \ n \ r \ n \ 2.) Теперь Пожалуйста" mcrypt blowfish php немного отличается по сравнению с java и .net Как автоматически включить расширения php в Homestead на бродяжничестве SELECT * FROM people WHERE user_id = '$ user_id' ORDER BY time GROUP BY фамилия PHP Предупреждение: mysqli_query () ожидает как минимум 2 параметра, 1 задано Проверка правильности имени JQuery Как загрузить язык с помощью gettext в PHP? Лучший способ документировать параметры массива в PHPDoc? SQL Builder для PHP с поддержкой JOIN? Угловая HTTP-почта для PHP и неопределенная Как проверить URL-адрес, но игнорировать, если http: // или пустым? Как прослушивать TCP-порт с помощью PHP? Как удалить тег элемента из URL-адреса в форме контакта 7? Список всех папок на моем компьютере (php)

Функция PHP – игнорировать некоторые параметры по умолчанию

Возможный дубликат:
Любой способ указать дополнительные значения параметра в 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){ ... } 

до встречи