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?

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...
}

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.


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.


14

Atribua um valor padrão ao argumento opcional.

function date ($format, $timestamp='') {
}

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.


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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.