Come si creano argomenti opzionali in php?


190

Nel manuale di PHP, per mostrare la sintassi delle funzioni con parametri opzionali, usano parentesi attorno a ciascun set di parametri opzionali dipendenti. Ad esempio, per la date()funzione, il manuale riporta:

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

Dove $timestampè un parametro facoltativo e quando lasciato in bianco viene impostato automaticamente sul time()valore restituito della funzione.

Come si fa a creare parametri opzionali come questo quando si definisce una funzione personalizzata in PHP?

Risposte:


253

Proprio come nel manuale, usa un =segno uguale a ( ) nella tua definizione dei parametri:

function dosomething($var1, $var2, $var3 = 'somevalue'){
    // Rest of function here...
}

function dosomething($var1, $var2, $optionalValue = null)Ho trovato questa opzione migliore.
Mohammad Zaid Pathan,

52

Il valore predefinito dell'argomento deve essere un'espressione costante. Non può essere una variabile o una chiamata di funzione.

Se hai bisogno di questa funzionalità comunque:

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

Supponendo che $barnon ci si aspetta che sia un booleano, ovviamente.


1
tuttavia, questo valuterà se 0 o "false" è stato passato a $ bar.
Tyzoid,

33
Null è un valore predefinito molto migliore.
Kzqai,

3
@DooMMasteR, qui, intendi $bar === false- questa è un'azione che dovrebbe essere eseguita quando $barè stata impostata come predefinita false. Questo eviterà azioni errate se 0viene passato, quindi funziona - A MENO CHE non sia necessario un valore booleano. Come ha detto Kzqai, una soluzione più generale è usare $bar = null, perché può essere usata anche quando i valori di $ bar sono booleani. Il test diventa quindi if (is_null($bar))o if ($bar === null).
ToolmakerSteve

22

Alcune note che ho anche trovato utili:

  • Mantieni i tuoi valori predefiniti sul lato destro.

    function whatever($var1, $var2, $var3="constant", $var4="another")
  • Il valore predefinito dell'argomento deve essere un'espressione costante. Non può essere una variabile o una chiamata di funzione.


14

Assegna all'argomento facoltativo un valore predefinito.

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

10

La funzione data sarebbe definita in questo modo:

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

    // Format the timestamp according to $format
}

Di solito, si inserisce il valore predefinito in questo modo:

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

Tuttavia, solo i letterali sono argomenti predefiniti validi, motivo per cui ho usato nullcome argomento predefinito nel primo esempio e non l'ho $timestamp = time() combinato con un controllo null. I letterali includono array ( array()o []), valori booleani, numeri, stringhe e null.


8

Se non sai quanti attributi devono essere elaborati, puoi usare il token ( ...) dell'elenco degli argomenti variadici introdotto in PHP 5.6 ( vedi la documentazione completa qui ).

Sintassi:

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

Per esempio:

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

Come puoi vedere, questo token fondamentalmente trasforma tutti i parametri in un array, che puoi elaborare nel modo che preferisci.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.