Вопрос по default, function, php, parameters – Значения параметров функции PHP по умолчанию, как передать значение по умолчанию для не последних параметров?

45

Большинство из нас знает следующий синтаксис:

function funcName($param='value'){
    echo $param;
}
funcName();

Result: "value"

Нам было интересно, как передать значения по умолчанию для параметра "не последний"; В параметре? Я знаю, что это терминология далеко, но простой пример будет:

function funcName($param1='value1',$param2='value2'){
    echo $param1."\n";
    echo $param2."\n";
}

Как мы выполняем следующее:

funcName(---default value of param1---,'non default');

Result:

value1
not default

Надеюсь, что это имеет смысл, мы хотим в основном принять значения по умолчанию для параметров, которые не являются последними.

Благодарю.

возможный дубликатUsing default value when calling a function Martijn
Есть ли в моем предложении указатьnull значение по умолчанию не предоставить решение? Мне просто интересно, почему кто-то возразил достаточно, чтобы отметить это без комментариев, почему Brad
Я прошу прощения за то, что неясно. Но, честно говоря, я не знаю, как термин «принять значение по умолчанию для параметра, который НЕ является последним в списке параметров». anonymous-one
Я действительно не понимаю ваш вопрос / проблему ..your second example works fine ManseUK
Проблема не в этой функции Nanne

Ваш Ответ

3   ответа
1

funcName(---default value of param1---,'non default');

Используйте следующий синтаксис:

funcName('non default',---default value of param1---);

Пример:

function setHeight2($maxheight,$minheight = 50) {
    echo "The MAX height is : $maxheight <br>";
    echo "The MIN height is : $minheight <br>";
}

setHeight2(350,250);
setHeight2(350); // will use the default value of 50
12

Чтобы обойти это, я бы предложил добавить следующую строку в вашу функцию:

$param1 = (is_null ($param1) ? 'value1' : $param1);

Затем вы можете назвать это так:

funcName (null, 'non default');

Result:

value1
non default
внешние скобки добавляют некоторую выгоду? Похоже, это будет работать так же хорошо с$param1 = is_null ($param1) ? 'value1' : $param1;
52

что вы пытаетесь сделать. Обычное решение этой проблемы - передать массив аргументов:

function funcName($params = array())
{
    $defaults = array( // the defaults will be overidden if set in $params
        'value1' => '1',
        'value2' => '2',
    );

    $params = array_merge($defaults, $params);

    echo $params['value1'] . ', ' . $params['value2'];
}

Пример использования:

funcName(array('value1' => 'one'));                    // outputs: one, 2
funcName(array('value2' => 'two'));                    // outputs: 1, two
funcName(array('value1' => '1st', 'value2' => '2nd')); // outputs: 1st, 2nd
funcName();                                            // outputs: 1, 2

Используя это, все аргументы необязательны. Передав массив аргументов, все, что находится в массиве, переопределит значения по умолчанию. Это возможно благодаря использованиюarray_merge() который объединяет два массива, переопределяя первый массив с любыми дублирующимися элементами во втором массиве.

Это швы, как самый чистый способ делать вещи. Хотя слегка раздутый (не по вашей вине ... phps, из-за отсутствия этого в наличии) ... anonymous-one

Похожие вопросы