PHP - наследовать значение функции по умолчанию - PullRequest
1 голос
/ 15 мая 2011

У меня есть функция, которая выглядит следующим образом:

function test($arg1 = 'my_value', $arg2 = 'second')
{
}

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

test(inherit, 'changed value');

Iобнаружил, что можно добавить эту строку в мою функцию (когда мое «наследование» изменено на ноль):

$arg1 = ( is_null( $arg1 ) ? 'my_value' : $arg1 );

Есть ли лучший способ, более хороший способ решить эту проблему?

Ответы [ 4 ]

2 голосов
/ 15 мая 2011

В зависимости от характера и количества ваших параметров может быть целесообразно использовать именованные параметры (по крайней мере, эмулируемые):

function xyz($args) {
    $args += array(
        'x' => 'default',
        'q' => 'default 2',
        // ...
    );

    // ...
}

xyz(array('q' => 'hehe, not default'));
1 голос
/ 15 мая 2011

То, как вы решили это, на самом деле довольно удобно.

Другой способ - каждый раз передавать вызов по значению по умолчанию.

Если это структурно, тогда вы должны пересмотреть функцию.

1 голос
/ 15 мая 2011

Сделать две разные функции:

// Full function
function testex($arg1 = 'my_value', $arg2 = 'second')
{
}

// Shorthand when just argument 2 is needed
function test2($arg2 = 'second')
{
  return testex('my_value', $arg2);
}

Таким образом, вам не нужно передавать значение NULL первому параметру, когда вам это не нужно.

0 голосов
/ 15 мая 2011

Вам нужно будет перевернуть их, вы не можете оставить первое значение пустым,

Установите первое значение и пусть второе будет значением по умолчанию;

ОБНОВЛЕНИЕ:

Если вы хотите, чтобы ваш аргумент имел динамическую длину, рассмотрите возможность использования func_get_args ();

function something() {
    $args = func_get_args();
  ....
}

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

...