2016-05-04 9 views
1

In PHP 7, ich möchte nur Arrays in den Parametern sein, aber was ist der Unterschied zwischen:PHP Unterschied in Array-Parameter

function exampleA(array $a, array $b) 
{ 

} 

und

function exampleB($a = array(), $b = array()) 
{ 

} 

nicht sicher, welches ich sein sollte verwenden.

+4

Die zweite Option stellt den Standardwert auf ein leeres Array ein. Wenn Sie diese Funktion ohne Parameter aufrufen, sind $ a und $ b leere Arrays. – yBrodsky

+4

'function exampleA (Array $ a, Array $ b)' erwartet explizit ein Array und erzeugt einen Fehler, wenn der übergebene Parameter kein Array ist . 'Funktion BeispielB ($ a = Array(), $ b = Array)' ist egal, was die Typen von $ a und $ b sind, und wird sie auf leere Arrays setzen, wenn sie nicht übergeben werden. –

Antwort

1

Die Kommentare sind gut, aber ich denke, wir brauchen eine Antwort.

exampleA()array $a Kräfte, die Argumente mit array als Typ, und wenn nicht wirft es einen abfangbare Fehler:

exampleA(); 
exampleA(1, 'A'); 

Beide Ausbeute:

Catchable fatal error: Argument 1 passed to exampleA() must be of the type array, none given, called in file on line X and defined in file on line X

Während in exampleB() mit $a = array():

function exampleB($a = array(), $b = array()) 
{ 
    var_dump(get_defined_vars()); 
} 

Sets Standardwerte leere Arrays, wenn keine Werte geliefert werden:

exampleB(); 

Ausbeuten:

array(2) { ["a"]=> array(0) { } ["b"]=> array(0) { } } 

Wenn jedoch Werte zugeführt werden, diese Werte unabhängig von der Art verwendet werden:

exampleB(1, 'A'); 

Erträge:

array(2) { ["a"]=> int(1) ["b"]=> string(1) "A" } 
+0

Und, Natürlich können sie kombiniert werden. – miken32