6

sto lavorando con una funzione la cui firma appare cosìsta passando NULL param esattamente lo stesso di passare senza param

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

In alcuni casi non ho i dati per l'ultimo parametro $p5 a passare, ma per motivi di coerenza voglio ancora passare qualcosa come NULL. Quindi, la mia domanda, tratta PHP di passare un NULL esattamente allo allo stesso modo di non passare nulla?

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

Sì, sono uguali, perché se non si passa nulla, la memoria non viene allocata. –

+0

dov'è la documentazione di fare la firma della funzione e che cosa è il suo uso – XMen

risposta

7

n Presumibilmente, la firma esatta è:

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

e la funzione utilizza func_get_arg o func_get_args per $p5.

func_num_args varia a seconda che si passi NULL. Se facciamo:

{ 
    echo func_num_args(); 
} 

poi

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

e

afunc(1,2,3,4); 

dare 5 e 4.

Spetta alla funzione se gestire questi lo stesso.

+1

Un vero esempio di ciò con una funzione PHP: 'substr ($ str, 1)' vs 'substr ($ str, 1, null)'. - "Se la lunghezza è data ed è 0, FALSE o NULL verrà restituita una stringa vuota." – ficuscr

4

passa NULL è esattamente lo stesso che non passa un argomento - se il valore di default è NULL, se non nel contesto della funzione func_num_args:

Restituisce il numero di argomenti passati alla funzione .

<?php 

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

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

?> 
6

No. È solo lo stesso se il valore predefinito del parametro è NULL, altrimenti non:

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

a(1, 2, NULL); 

stampe NULL.

Quindi non si può dire che è sempre lo stesso. NULL è solo un altro valore e non è quello speciale.


Per non parlare dei parametri non opzionali: Calling a(1) darebbe un errore (avvertenza), ma a(1,NULL) opere.