Heim >Backend-Entwicklung >PHP-Tutorial >PHP-Referenzübergabe und -rückgabe

PHP-Referenzübergabe und -rückgabe

伊谢尔伦
伊谢尔伦Original
2016-11-22 11:12:451152Durchsuche

Übergabe per Referenz

Sie können eine Variable per Referenz an eine Funktion übergeben, sodass die Funktion den Wert ihres Parameters ändern kann. Die Syntax lautet wie folgt:

<?php
    function foo(&$var)
    {
        $var++;
    }
    $a=5;
    foo($a);    // $a is 6 here
?>

Beachten Sie, dass es im Funktionsaufruf keine Referenzsymbole gibt – nur in der Funktionsdefinition. Die Funktionsdefinition allein reicht aus, damit Parameter korrekt per Referenz übergeben werden. Wenn Sie in neueren PHP-Versionen & in foo(&$a); verwenden, erhalten Sie eine Warnung, dass „Call-time pass-by-reference“ veraltet ist.

Folgendes kann als Referenz übergeben werden:

Variablen wie foo($a)

Neue Anweisungen wie foo(new foobar())

Von Funktionen zurückgegebene Referenzen, zum Beispiel:

<?php
    function &bar()
    {
        $a = 5;
        return $a;
    }
    foo(bar());
?>

Andere Ausdrücke können nicht als Referenz übergeben werden und das Ergebnis ist undefiniert. Das folgende Beispiel für die Referenzübergabe ist beispielsweise ungültig:

<?php
    function bar() // Note the missing &
    {
        $a = 5;
        return $a;
    }
    foo(bar()); // 自 PHP 5.0.5 起导致致命错误
    foo($a = 5) // 表达式,不是变量
    foo(5) // 导致致命错误
?>

Diese Bedingungen sind in PHP 4.0.4 und späteren Versionen verfügbar.

Referenzrückgabe

Referenzrückgabe wird verwendet, wenn Sie mithilfe einer Funktion herausfinden möchten, an welche Variable die Referenz gebunden werden soll. Verwenden Sie keine Rückgabereferenzen, um die Leistung zu steigern. Die Engine ist intelligent genug, um sie selbst zu optimieren. Geben Sie Referenzen nur zurück, wenn ein triftiger technischer Grund vorliegt! Um eine Referenz zurückzugeben, verwenden Sie diese Syntax:

<?php
    class foo {
        public $value = 42;
        public function &getValue() {
            return $this->value;
        }
    }
    $obj = new foo;
    $myValue = &$obj->getValue(); // $myValue is a reference to $obj->value, which is 42.
    $obj->value = 2;
    echo $myValue; // prints the new value of $obj->value, i.e. 2.
?>

In diesem Beispiel werden den Eigenschaften des von der getValue-Funktion zurückgegebenen Objekts Werte zugewiesen und nicht kopiert, so als ob keine Referenzsyntax verwendet würde.

Hinweis: Anders als bei der Parameterübergabe muss hier das kaufmännische Und-Zeichen an beiden Stellen verwendet werden – was anzeigt, dass eine Referenz zurückgegeben wird, nicht die übliche Kopie, und auch anzeigt, dass $myValue als Referenz gebunden ist, statt wie üblich Abtretung.

Hinweis: Wenn Sie versuchen, eine Referenz von einer Funktion wie dieser zurückzugeben: return ($this->value);, funktioniert dies nicht, da Sie versuchen, das Ergebnis eines Ausdrucks und nicht eines zurückzugeben referenzierte Variable. Sie können Referenzvariablen nur von Funktionen zurückgeben, eine andere Möglichkeit gibt es nicht. Wenn Code versucht, einen dynamischen Ausdruck oder das Ergebnis des neuen Operators zurückzugeben, wird ab PHP 4.4.0 und PHP 5.1.0 ein E_NOTICE-Fehler ausgegeben.


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