6

geben ich mit einer Funktion, deren Signatur wie folgt aussiehtBegegnen NULL param genau das gleiche wie keine param

afunc(string $p1, mixed $p2, array $p3 [, int $p4 = SOM_CONST [, string $p5 ]]) 

In einigen Fällen arbeite ich für den letzten Parameter nicht $p5 müssen passieren, aber aus Gründen der Konsistenz möchte ich noch so etwas wie NULL weitergeben. Also meine Frage, behandelt PHP das Übergeben einer Null genau das gleiche wie nichts passiert?

somefunc($p1, $p2, $p3, $p4 = SOM_CONST); 
somefunc($p1, $p2, $p3, $p4 = SOM_CONST, NULL); 
+1

Ja, sie sind gleich, denn wenn Sie nichts übergeben, wird Speicher nicht zugewiesen. –

+0

wo ist die Dokumentation der Signatur der Funktion und was ist ihre Verwendung? – XMen

Antwort

7

No. Vermutlich die genaue Signatur ist:

function afunc($p1, $p2, $p3, $p4 = SOM_CONST) 

und die Funktion verwendet func_get_arg oder func_get_args für $p5.

func_num_args wird davon abhängig sein, ob Sie NULL übergeben. Wenn wir das tun:

{ 
    echo func_num_args(); 
} 

dann

afunc(1,2,3,4,NULL); 

und

afunc(1,2,3,4); 

geben 5 und 4.

Es liegt an der Funktion, ob diese gleich zu behandeln.

+1

Ein echtes Beispiel dafür mit einer PHP-Funktion: 'substr ($ str, 1)' vs 'substr ($ str, 1, null)'. - "Wenn Länge angegeben ist und 0 ist, wird FALSE oder NULL eine leere Zeichenfolge zurückgegeben." – ficuscr

4

Passing NULL ist genau das gleiche wie kein Argument übergeben - wenn der Standardwert NULL ist, außer im Rahmen der func_num_args Funktion:

Gibt die Anzahl der Argumente an die Funktion übergeben .

<?php 

function test($test=NULL) { 
    echo func_num_args(); 
} 

test(); //outputs: 0 
test(NULL); //outputs: 1 

?> 
6

Nein, es ist nur das gleiche, wenn der Vorgabewert des Parameters NULL ist, sonst nicht:

function a($a, $b, $c = 42) { 
    var_dump($c); 
} 

a(1, 2, NULL); 

druckt NULL.

So kann man nicht sagen, es ist immer das Gleiche. NULL ist nur ein weiterer Wert und es ist nicht , dass spezielle.


Nicht Nicht-optionale Parameter erwähnen: a(1) aufrufen Sie einen Fehler (Warnung), aber a(1,NULL) Arbeiten geben würde.