2017-05-03 3 views
1

Wie delquer ich eine Variable in einer if-Anweisung, die nur in den if-Block geht, wenn die Variable kein Nullwert ist?PHP - Umfang der Zuweisung innerhalb der if-Anweisung

Auch, was ist der Umfang der $var in Code wie:

if(($var = funky()) != null) {} 

Kann ich $var außerhalb des if Block verweisen?

+1

'if ($ var = funky())' - Ich nehme an, dass das Pseudo-Code ist? Wenn nicht, dann machst du '=', anstatt '==' zu vergleichen, es sei denn, du willst das machen. –

+0

* "Wird der Code innerhalb des if-Blocks weiterhin ausgeführt oder benötige ich auch einen bedingten?" * - Ja, weil er immer als TRUE betrachtet wird, da es sich um eine Zuweisung handelt. Deine Eingabe: * "wie wenn (! Leer ($ var = funky()))" * - nur wenn es nicht leer ist. –

+0

@ Fred-ii- Ich glaube ich habe dich, also wird die variable Zuweisung in diesem Fall ** immer ** sein. Das macht es im Grunde sinnlos, wenn ich keine Bedingung hinzufüge –

Antwort

1

Ein Zuweisungsausdruck in PHP gibt den zugewiesenen Wert zurück. Von t he documentation:

Der Wert eines Zuweisungsausdrucks ist der zugewiesene Wert.

Also, wenn unabhängig von funky() wieder etwas lose gleich null auswertet, wird $var = funky() auf falsch bewerten, so dass der if Block nicht ausgeführt wird.

Die Zuweisung in der if-Bedingung wirkt sich jedoch nicht auf den Bereich der zugewiesenen Variablen aus. $var wird im aktuellen Bereich (innerhalb und außerhalb des if-Blocks) nach der Zuweisungsanweisung verfügbar sein.

Zum Beispiel:

function funky() { 
    return false; 
} 

if(($var = funky()) != null) { 
    echo 'something'; 
} 

var_dump($var); 

Hier werden Sie nur boolean false


Die einzige Möglichkeit sehe ich denken kann, um sicherzustellen, dass eine Variable nur verfügbar ist, im Inneren ein if Block ist Weisen Sie es dort zu und heben Sie es vor dem Ende des Blocks auf.

if (funky() != null) { // evaluate funky() without assigning 
    $var = funky();  // call funky() again to assign 
    // do stuff 
    unset($var); 
} 

Aber ich kann nicht wirklich einen guten Grund dafür denken.

+0

Wow. Ich bin überrascht, dass '$ var' verfügbar ist * außerhalb * der if Block –

+0

@KolobCanyon warum? Sie haben den Bereich überhaupt nicht geändert (eine if-Anweisung ist keine Schließung). Sie haben im Grunde nur eine Variable zugewiesen und dann eine if-Anweisung geschrieben, außer Sie haben es alle in der gleichen Zeile getan – billyonecan

+0

@billyonecan Gotcha. Wusste ich nicht. Ich hatte immer versucht, die Variable zuzuweisen und dann die if-Anweisung in der nächsten Zeile zu machen, aber ich sah Code, der von einem gezeichnet wurde ... was mich zu dieser Frage führte –