аргументы по умолчанию php

В PHP, если у меня есть функция, написанная так

function example($argument1, $argument2="", $argument3="") 

И я могу назвать эту функцию в другом месте, как это

 example($argument1) 

Но если я хочу придать некоторую ценность критическому аргументу, должен ли я сделать это

 example($argument1, "", "test"); 

Или

  example($argument1, NULL, "test"); 

Я думаю, что оба будут работать, но что лучше? Потому что в будущем, если значение для параметра $ argument2 будет изменено в основной функции, и если у меня есть "", тогда будет ли какая-нибудь проблема? Или NULL – лучший вариант?

благодаря

Solutions Collecting From Web of "аргументы по умолчанию php"

Вы можете использовать либо:

 example($argument1, '', 'test'); 

Или

 example($argument1, NULL, 'test'); 

Вы всегда можете проверить использование NULL вместо пустой строки:

 if ($argument === NULL) { // } 

Я думаю, все зависит от того, что происходит внутри функции с аргументами.

Передача null или "" для параметра, который вы не хотите указывать, все равно приводит к тому, что эти значения null и пустые строки передаются функции.

Единственный раз, когда используется значение по умолчанию для параметра, – это параметр НЕ УСТАНАВЛИВАЕТ ВСЕ в вызывающем коде. example('a') позволит args # 2 и # 3 получить значения по умолчанию, но если вы делаете example('a', null, "") то arg # 3 имеет значение null, а arg # 3 – пустая строка в функция, а не значения по умолчанию.

В идеале PHP будет поддерживать что-то вроде example('a', , "") чтобы использовать значение по умолчанию для arg # 2, но это всего лишь синтаксическая ошибка.

Если вам нужно оставить аргументы в середине вызова функции, но указать значения для более поздних аргументов, вам нужно будет явно проверить какое-либо значение дозорности в самой функции и самостоятельно установить значения по умолчанию.


Вот пример кода:

 <?php function example($a = 'a', $b = 'b', $c = 'c') { var_dump($a); var_dump($b); var_dump($c); } 

и для различных входных данных:

 example(): string(1) "a" string(1) "b" string(1) "c" example('z'): string(1) "z" string(1) "b" string(1) "c" example('y', null): string(1) "y" NULL string(1) "c" example('x', "", null): string(1) "x" string(0) "" NULL 

Обратите внимание, что как только вы укажете ANYTHING для аргумента в вызове функции, это значение передается функции и переопределяет значение по умолчанию, которое было задано в определении функции.

Я думаю, вам будет лучше, если вы определите необязательные параметры как null в определении функции и сохраните их таким образом, таким образом, называя их example($argument1, NULL, $argument="test") . Просто убедитесь, что вы используете параметры null'd в самой функции, чтобы не создавать никаких предупреждений. Вы можете использовать false слишком долго, пока уверены, что используете этот параметр в самой функции.

Если вам кажется, что эта проблема слишком много, лучшим способом может быть использование одного ассоциативного массива для переменных:

 function example($optionsIn = array()) { $options = array( 'var1' => null, 'var2' => 'something', 'var3' => 'else' ) ; $options = array_merge($options, $optionsIn) ; } $options = array( 'var2' => 'different' ) ; example($options) ; 

Таким образом, вы можете передать любые параметры функции, которые вы хотите, оставив других и убедитесь, что в функции есть соответствующие значения по умолчанию.

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

Это зависит от использования функции.

 function a($b=true,$c=false){ echo $b?'true':'false'; } 

проведение

  a(NULL, 1); 

результаты: false . но просто a (): true

Это означает, что вам нужен аргумент по умолчанию, тогда вы должны использовать его по умолчанию:

  a(true, 1);