2016-08-12 4 views
2

Es gibt 3 var_dumps in diesem Code (der zweite ist auskommentiert).
Wenn ich es ausführen, erzeugen die erste und die dritte var_dumps wie erwartet eine Benachrichtigung (beides).
Nach dem Auskommentieren des zweiten var_dump beendet der dritte var_dump das Auslösen einer Nachricht.
Meine Frage ist: warum?
Ich würde immer noch einen Hinweis dort erwarten, denn in der 3. var_dump lese ich immer noch eine Variable, die vorher nicht gesetzt ist (wie das isset anzeigt).Der Aufruf von unset-Variablen ruft keine Benachrichtigung nach dem Aufruf als Referenz auf

<?php 

function nvl(&$var, $default = 'hello') 
{ 
    return !isset($var) ? $default : $var; 
} 

var_dump($a, isset($a)); 
//var_dump(nvl($a), isset($a)); 
var_dump($a, isset($a)); 
+0

Wenn diese Zeile 'var_dump (nvl ($ a), isset ($ a));' un-kommentiert ist, dann wird $ a erstellt –

+3

Da Sie die Funktion aufrufen und die Variable als Referenz übergeben, erstellen Sie sie: http : //php.net/manual/en/language.references.whatdo.php – Rizier123

+0

Nein, $ a wird nicht erstellt. Immer wenn ich nach nvl ($ a) frage, ob $ a gesetzt ist, lautet die Antwort nein. Was gut ist, denn das ist nicht der Sinn dieser Funktion. –

Antwort

0

becouse können, um es zu $anvl als Referenz zu übergeben erstellt wird.

Wenn Sie & von nvl ersten arg entfernen, erhalten Sie 3 Hinweise.

+0

Ja, es scheint logicaI, aber immer noch ist es nicht völlig klar für mich. isset prüft, ob es gesetzt ist. Es ist nicht gesetzt, also gibt isetset false zurück, was in Ordnung ist. Hinweis wird ausgelöst, weil er nicht definiert ist. Bevor es referenziert wird, ist es nicht -> Nachricht wird geworfen. Okay. Nach dem Verweisen verschwindet der Hinweis, sodass der Verweis $ a erstellt wird, was bedeutet, dass er jetzt definiert ist? Also eine Referenz erstellt bedeutet, dass es auch definiert wird? –

+1

@AsstigNaGahum eine Perfetc Link von Rizer in Kommentar gegeben, gehen Sie für sie und Sie werden klar Bild –

+0

das ist, weil Sie Variablen in php nicht deklarieren müssen, betrachten ' var_dump ($ a, isset ($ a)); $ a = 1; '$ a ist magisch für denselben Fall erstellt – cske

Verwandte Themen