Heim  >  Artikel  >  Backend-Entwicklung  >  Warum beheben Klammern den Fehler „Nur Variablen sollten als Referenz übergeben werden“ in PHP-Funktionsaufrufen?

Warum beheben Klammern den Fehler „Nur Variablen sollten als Referenz übergeben werden“ in PHP-Funktionsaufrufen?

Linda Hamilton
Linda HamiltonOriginal
2024-10-26 20:54:02151Durchsuche

Why do Parentheses Fix

Klammern und die Bedeutung von Funktionsaufrufergebnissen

Betrachten Sie das folgende Beispiel:

<?php
function get_array() {
    return array();
}

function foo() {
    return reset(get_array()); // Error: "Only variables should be passed by reference"
}

In diesem Code Der Fehler tritt auf, weil das Ergebnis des Funktionsaufrufs keine Referenz ist. Wenn das Ergebnis jedoch in Klammern gesetzt wird, verschwindet der Fehler:

function foo() {
    return reset((get_array())); // OK
}

Was passiert hier?

Obwohl es keine Dokumentation gibt, die dieses Verhalten explizit beschreibt, kann es durch Untersuchen verstanden werden die PHP-Grammatik und Compiler-Implementierung.

Auswirkung auf das Parsen

Die Klammern bewirken, dass der PHP-Parser das Ergebnis des Funktionsaufrufs als Ausdruck statt als Variable interpretiert. Dies wirkt sich darauf aus, wie der Compiler den Code interpretiert, insbesondere den Opcode, der zum Senden von Variablen an Funktionen verwendet wird.

Referenzanzahl und Zend-Engine-Optimierung

Die Zend Engine, die Kern-Engine von PHP ermöglicht die Verwendung von Nicht-Referenzvariablen mit einem Referenzzähler von 1 dort, wo Referenzen erwartet werden. Im obigen Beispiel ist das zurückgegebene Array ein neues Objekt mit einem Referenzzähler von 1. Dadurch kann die Zend Engine den Code optimieren und die Fehlermeldung vermeiden.

Einschränkungen

Es ist wichtig zu beachten, dass dieses Verhalten als Fehler betrachtet wird und man sich nicht darauf verlassen sollte. Der Referenzzähler des Funktionsaufrufergebnisses kann sich in zukünftigen PHP-Versionen ändern, wodurch Code beschädigt wird, der von diesem Verhalten abhängt.

Alternative Lösung

Um zu vermeiden, dass man sich auf diese potenziell instabile Situation verlässt Verhalten, weisen Sie das Ergebnis des Funktionsaufrufs explizit einer Variablen zu:

function foo() {
    $result = get_array();
    return reset($result);
}

Das obige ist der detaillierte Inhalt vonWarum beheben Klammern den Fehler „Nur Variablen sollten als Referenz übergeben werden“ in PHP-Funktionsaufrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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