Heim > Backend-Entwicklung > PHP-Tutorial > 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
Freigeben: 2024-10-26 20:54:02
Original
268 Leute haben es durchsucht

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"
}
Nach dem Login kopieren

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
}
Nach dem Login kopieren

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);
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage