В руководстве по PHP, чтобы показать синтаксис для функций с необязательными параметрами, они используют скобки вокруг каждого набора зависимых необязательных параметров. Например, для функции date() руководство гласит:
string date ( string $format [, int $timestamp = time() ] )
Где $timestamp - необязательный параметр, а если он оставлен пустым, по умолчанию используется значение, возвращаемое функцией time().
Как вы собираетесь создавать подобные необязательные параметры при определении пользовательской функции в PHP?






Как и в руководстве, используйте знак равенства (=) в определении параметров:
function dosomething($var1, $var2, $var3 = 'somevalue'){
// Rest of function here...
}
Задайте необязательному аргументу значение по умолчанию.
function date ($format, $timestamp='') {
}
Некоторые заметки, которые я также нашел полезными:
Сохраните значения по умолчанию с правой стороны.
function whatever($var1, $var2, $var3 = "constant", $var4 = "another")
Значение аргумента по умолчанию должно быть постоянным выражением. Это не может быть переменная или вызов функции.
The default value of the argument must be a constant expression. It can't be a variable or a function call.
Однако, если вам нужна эта функция:
function foo($foo, $bar = false)
{
if (!$bar)
{
$bar = $foo;
}
}
Предполагая, что $bar, конечно, не будет логическим.
однако это будет оценивать, было ли передано 0 или «ложь» $ bar.
Null - гораздо лучший вариант по умолчанию.
@DooMMasteR, здесь вы имеете в виду $bar === false - это действие, которое должно быть выполнено, когда $bar по умолчанию установлен на false. Это позволит избежать неправильных действий, если будет передан 0, поэтому он действительно работает - ЕСЛИ не требуется логическое значение. Как сказал Кзкаи, более общим решением является использование $bar = null, потому что его также можно использовать, когда значения $ bar являются логическими. Затем тест становится if (is_null($bar)) или if ($bar === null).
Функция даты может быть определена примерно так:
function date($format, $timestamp = null)
{
if ($timestamp === null) {
$timestamp = time();
}
// Format the timestamp according to $format
}
Обычно вы устанавливаете значение по умолчанию следующим образом:
function foo($required, $optional = 42)
{
// This function can be passed one or more arguments
}
Однако только литералы являются допустимыми аргументами по умолчанию, поэтому я использовал null в качестве аргумента по умолчанию в первом примере, нет$timestamp = time(), и объединил его с нулевой проверкой. Литералы включают массивы (array() или []), логические значения, числа, строки и null.
Если вы не знаете, сколько атрибутов необходимо обработать, вы можете использовать токен списка аргументов с переменным числом аргументов (...), представленный в PHP 5.6 (см. полную документацию здесь).
Синтаксис:
function <functionName> ([<type> ]...<$paramName>) {}
Например:
function someVariadricFunc(...$arguments) {
foreach ($arguments as $arg) {
// do some stuff with $arg...
}
}
someVariadricFunc(); // an empty array going to be passed
someVariadricFunc('apple'); // provides a one-element array
someVariadricFunc('apple', 'pear', 'orange', 'banana');
Как видите, этот токен в основном превращает все параметры в массив, который вы можете обрабатывать любым удобным для вас способом.
function dosomething($var1, $var2, $optionalValue = null)Я нашел этот вариант получше.