В PHP, если у меня есть функция, написанная так
function example($argument1, $argument2="", $argument3="")
И я могу назвать эту функцию в другом месте, как это
example($argument1)
Но если я хочу придать некоторую ценность критическому аргументу, должен ли я сделать это
example($argument1, "", "test");
Или
example($argument1, NULL, "test");
Я думаю, что оба будут работать, но что лучше? Потому что в будущем, если значение для параметра $ argument2 будет изменено в основной функции, и если у меня есть "", тогда будет ли какая-нибудь проблема? Или NULL – лучший вариант?
благодаря
Вы можете использовать либо:
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);