Heim  >  Artikel  >  Backend-Entwicklung  >  Ich verstehe die Vorsichtsmaßnahmen für den ternären Operator in der PHP-Dokumentation nicht

Ich verstehe die Vorsichtsmaßnahmen für den ternären Operator in der PHP-Dokumentation nicht

WBOY
WBOYOriginal
2016-10-11 14:23:371115Durchsuche

Hinweis: Beachten Sie, dass der ternäre Operator eine Anweisung ist, seine Auswertung also keine Variable, sondern das Ergebnis der Anweisung ist. Dies ist wichtig, wenn Sie eine Variable per Referenz zurückgeben möchten. Die Anweisung return $var == 42 ? $a : $b; in einer Funktion, die per Referenz zurückgibt, wird nicht funktionieren und eine zukünftige Version von PHP wird eine Warnung darüber ausgeben.

return $var == 42 ? $a : $b;Was bedeutet es, dass es nicht funktioniert? Kann es keinen Wert zurückgeben oder so?

<code class="php">function test($var){
  return $var == 42 ? 1 : 2;
}

echo test(40);    //2</code>

Auf diese Weise können Sie es während des Tests zurückgeben...

Antwortinhalt:

Hinweis: Beachten Sie, dass der ternäre Operator eine Anweisung ist, seine Auswertung also keine Variable, sondern das Ergebnis der Anweisung ist. Dies ist wichtig, wenn Sie eine Variable per Referenz zurückgeben möchten. Die Anweisung return $var == 42 ? $a : $b; in einer Funktion, die per Referenz zurückgibt, wird nicht funktionieren und eine zukünftige Version von PHP wird eine Warnung darüber ausgeben.

return $var == 42 ? $a : $b;Was bedeutet es, dass es nicht funktioniert? Kann es keinen Wert zurückgeben oder so?

<code class="php">function test($var){
  return $var == 42 ? 1 : 2;
}

echo test(40);    //2</code>

Auf diese Weise können Sie es während des Tests zurückgeben...

Betrifft das Szenario „Zurückgeben einer Variablen als Referenz“

Siehe Beispiel: get2 kann nicht die erwarteten Ergebnisse erzielen

https://3v4l.org/2Q9ai

<code class="php"><?php

$data = new stdClass;
$data->a = 13;
$data->b = 42;

$var = &get1($data, true);
$var = 14;
var_dump($data);

$var2 = &get2($data, false);
$var2 = 43;
var_dump($data);

function &get1($data, $isA) {
    if($isA) {
        return $data->a;
    } else {
        return $data->b;
    }
}

function &get2($data, $isA) {
    return $isA ? $data->a : $data->b;
}</code>
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn