Como você cria argumentos opcionais em php?

189

No manual do PHP, para mostrar a sintaxe das funções com parâmetros opcionais, eles usam colchetes em torno de cada conjunto de parâmetros opcionais dependentes. Por exemplo, para a date()função, o manual lê:

string date ( string $format [, int $timestamp = time() ] )

Onde $timestampé um parâmetro opcional e, quando deixado em branco, o padrão time()é o valor de retorno da função.

Como você cria parâmetros opcionais como este ao definir uma função personalizada no PHP?

gregh
fonte

Respostas:

253

Assim como o manual, use um =sinal de igual ( ) na sua definição dos parâmetros:

function dosomething($var1, $var2, $var3 = 'somevalue'){
    // Rest of function here...
}
Jeff Winkworth
fonte
function dosomething($var1, $var2, $optionalValue = null)Encontrei essa melhor opção.
Mohammad Zaid Pathan
52

O valor padrão do argumento deve ser uma expressão constante. Não pode ser uma variável ou uma chamada de função.

Se você precisar dessa funcionalidade, no entanto:

function foo($foo, $bar = false)
{
    if(!$bar)
    {
        $bar = $foo;
    }
}

Assumindo que $barnão se espera que seja um booleano, é claro.

Ross
fonte
1
no entanto, isso avaliará se 0 ou "false" foi passado para $ bar.
Tyzoid
33
Nulo é um padrão muito melhor.
Kzqai
3
@DooMMasteR, aqui, você quer dizer $bar === false- esta é uma ação que deve ser executada quando o $barpadrão é o padrão false. Isso evitará a ação incorreta se 0for passada, assim funcionará - A menos que seja necessário um booleano. Como Kzqai disse, uma solução mais geral é usar $bar = null, porque isso também pode ser usado quando os valores de $ bar são booleanos. O teste então se torna if (is_null($bar))ou if ($bar === null).
Página
22

Algumas notas que também achei úteis:

  • Mantenha seus valores padrão no lado direito.

    function whatever($var1, $var2, $var3="constant", $var4="another")
  • O valor padrão do argumento deve ser uma expressão constante. Não pode ser uma variável ou uma chamada de função.

gregh
fonte
14

Atribua um valor padrão ao argumento opcional.

function date ($format, $timestamp='') {
}
mk.
fonte
10

A função date seria definida assim:

function date($format, $timestamp = null)
{
    if ($timestamp === null) {
        $timestamp = time();
    }

    // Format the timestamp according to $format
}

Normalmente, você colocaria o valor padrão como este:

function foo($required, $optional = 42)
{
    // This function can be passed one or more arguments
}

No entanto, apenas literais são argumentos padrão válidos, e é por isso que usei nullcomo argumento padrão no primeiro exemplo, não $timestamp = time() e combinei-o com uma verificação nula. Os literais incluem matrizes ( array()ou []), booleanos, números, seqüências de caracteres e null.

Lars Gyrup Brink Nielsen
fonte
8

Se você não sabe quantos atributos precisam ser processados, pode usar o token da lista de argumentos variados ( ...) introduzido no PHP 5.6 ( veja a documentação completa aqui ).

Sintaxe:

function <functionName> ([<type> ]...<$paramName>) {}

Por exemplo:

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');

Como você pode ver, esse token basicamente transforma todos os parâmetros em uma matriz, que você pode processar da maneira que desejar.

Gergely Lukacsy
fonte