php вызов функции по умолчанию - PullRequest
1 голос
/ 22 апреля 2011

Как мне сделать вызов функции, в которой я хочу использовать некоторые аргументы по умолчанию и некоторые из них, которые я передаю:

function genericlist (array $arr, string $name, [string $attribs = null], 
           [string $key = 'value'], [string $text = 'text'], 
           [mixed $selected = NULL], [ $idtag = false], [ $translate = false])

Я хочу передать только $ arr, $ name, $ selectedи использовать значения по умолчанию для всего остального, как мне это сделать?Я знаю, что мог бы передать значения по умолчанию и пойти по порядку, но я должен найти другой путь.Спасибо.

Ответы [ 3 ]

1 голос
/ 22 апреля 2011

array_merge может дать вам решение, если вы заинтересованы в использовании маршрута массива:

function func1($args = array())
{
   $defaults = array('X' => 10, 'Y' => 30);
   $args = array_merge($defaults, $args);
   // $args now has default arguments and user supplied arguments

   return $args;
}

func1(); // array('X' => 10, 'Y' => 30)
func1(array('X' => 40)); // array('X' => 40, 'Y' => 30)
0 голосов
/ 22 апреля 2011

Я вижу два решения:

  1. Создать функцию с нулевыми аргументами. Когда указано нулевое значение, проверьте его в функции и замените его значением по умолчанию. Это обходится тем, что он больше не указан в прототипе, но предлагает решение по умолчанию с минимальными усилиями.
  2. Превратите ваш прототип в аргумент массива с парами ключ-значение. Это похоже на первое решение, но вы можете использовать метод, такой как array_merge, чтобы объединить массив «значение по умолчанию» и недавно переданные значения аргумента.

Пример 1:

function abc($foo = null, $bar = null)
{
  // defaulting parameters
  if (is_null($foo)) $foo = 'Hello, world!'; // foo default value
  if (is_null($bar)) $bar = 123.45; // bar default value

  // on-ward with the function
}

// override bar, but not foo:
abc(null, 987.65);

Пример 2:

function def($args)
{
  // defaulting parameters
  $args = array_merge(
    array(
      'foo' => 'Hello, world!', // Default foo value
      'bar' => 123.45           // default bar value
    ),
    $args // override with supplied values
  );

  // on-ward with the function
}

// override bar, but not foo
def(array('bar'=>987.65));
0 голосов
/ 22 апреля 2011

Что ж, либо вы действительно передаете значения по умолчанию, либо вы переупорядочиваете аргументы, чтобы поставить $ selected перед всеми другими необязательными аргументами.

Также вы можете запрашивать именованные параметры на форумах разработки PHP.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...