PHP Функция по умолчанию Значения параметров, как «передать значение по умолчанию» для «не последних» параметров?

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

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 

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

Благодарю.

Solutions Collecting From Web of "PHP Функция по умолчанию Значения параметров, как «передать значение по умолчанию» для «не последних» параметров?"

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

 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() который объединяет два массива, переопределяя первый массив с любыми повторяющимися элементами во втором массиве.

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

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

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

 funcName (null, 'non default'); Result: value1 non default 

Простое решение вашей проблемы, вместо использования:

 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