PHP: Warum verhindern Umgebungsfunktionsaufrufe mit runden Klammern die Weitergabe von Referenzen? [Duplikat]

8

Ich habe nach diesem Thema gesucht, aber ich habe nur Dinge gefunden, die ähnlich sind wie "Hier ist ein Trick, der funktioniert", aber niemals eine Erklärung.

Im folgenden Code:

%Vor%

Der erste Aufruf von end() führt zu einem Hinweis:

  

Strenge Standards: Nur Variablen sollten als Referenz in /home/john/www/test/dp.php in Zeile 3

übergeben werden

Der nächste, mit array_flip($_GET) in () eingeschlossen, erzeugt keine Beschwerden.

Ich verstehe den Grund für die Benachrichtigung, was Strikte Standards sind, was "durch Verweis" bedeutet, und dass end() einen Verweis auf ein Array als Argument akzeptiert. (Es muss, da es das Original betrifft.) Meine Sorge ist über warum es funktioniert. Erstellt die Umgebungsvariable () eine temporäre Variable, oder führt das den PHP-Parser einfach nur aus? Wenn eine temporäre Variable erstellt (und dies per Entwurf tut), sollte safe verwendet werden, aber wenn es ein Hack ist Trick den Parser dann wird es wahrscheinlich in zukünftigen Versionen von PHP brechen. (Ich bin zufällig auf PHP Version 5.4.36-0 + deb7u1)

Bitte beachten Sie, dass ich nicht sicher bin, ob ich diese Konstruktion mag, auch wenn es sicher ist (es ist leicht, es nicht zu sehen, und andere Leute wissen vielleicht nicht, warum es da ist), aber es ist oft bequem und einfach zu lesen Funktionen können so aneinandergereiht werden.

    
Slashback 27.01.2015, 19:48
quelle

1 Antwort

3

Dies führt zu einem Implementierungsdetail, wie anderswo diskutiert auf StackOverflow .

Zusammenfassung: Dieses Verhalten sollte in der Tat als Fehler betrachtet werden. Verlassen Sie sich nicht darauf . In der Tat, dank diesem RFC funktioniert dieser Trick nicht mehr, sobald PHP 7 veröffentlicht wird.

    
Alex 27.01.2015, 20:05
quelle

Tags und Links