| | | | |
| |||||||
| PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen |
|
| | LinkBack | Themen-Optionen | Thema bewerten |
| | |
| PHP Code Flüsterer Registriert seit: 21.08.2005 Beiträge: 4682 PHP-Kenntnisse: Fortgeschritten | |
| | |
| Gast
Beiträge: n/a
| Erstaunlich?? Nein, kein Wunder. Ich teste mit PHP5.1RC1 auf meinem Apache. Und debuggen aber im ZendStudio, welches PHP 5.0.4 verwendet. Folgender Code gibt unterschiedliche Ergebnisse: PHP-Code: Fatal error: Cannot access private property foo::$bar in C:\PHP5Dev\tests\overloading\test2.php on line 14 PHP 5.1RC1: 132 |
|
| | |
| Erfahrener Benutzer Registriert seit: 15.08.2004
Beiträge: 2.473
![]() | In PHP 5.1 wird der Zugriff von aussen auf eine private Variable als "findet nix" interpretiert, weswegen __get() aufgerufen wird. In PHP 5.0 wird die private Variable gefunden, was im fatal error endet. Ein Zugriff von innen wird nie __get() aufrufen, da $bar ja schon definiert ist.
__________________ mod = master of disaster |
| | |
| | |
| Gast
Beiträge: n/a
| Ja okay, die Frage ist nur welche Variante nun ein Bug ist oder nicht. Das Verhalten von PHP5.1 wäre richtiger als bei 5.0, da private und protected nicht sichtbar sind und somit die Funktionen __get, __call und __set greifen, egal ob klassenintern die member schon definiert wurden oder nicht. Sonst wären diese Funktionen doch sinnlos. Bei public ist das Verhalten auch okay, dort wird kein __get verwendet wenn die Eigenschaft existiert. Wenn man von innen (also von der Klasse aus) auf __get zurückgreifen will, darf man die Eigenschaft noch nicht definieren (wie im 2. Beispiel ganz oben). Eigentlich auch ein logisches Verhalten. Aber alles irgendwie nicht richtig dokumentiert... |
|
| | |
| Erfahrener Benutzer Registriert seit: 15.08.2004
Beiträge: 2.473
![]() | Ein Bug ist keins, die Theorie hat sich von 5.0 zu 5.1 halt verändert. Im Endeffekt ist diese Abfangerei nicht auf die Feinheiten von Sichtbarkeitsmodellen ausgelegt, sondern eher auf ein gibbet oder gibbet nich. Nützlich um schnell nen Decorator zu schreiben, oder zur Lazy-Initialisierung ohne private-Spirenzchen.
__________________ mod = master of disaster |
| | |
|
| Themen-Optionen | |
| Thema bewerten | |
|
|
| Besucher kamen über folgende Suchanfragen bei Google auf diese Seite |
| php __get, lazy initialization php, php __get aufrufen, php5 lazy loading, __get aufruf, lazy initialisation, php __get return private members, php lazy load __get, __get switch class php, php __get implementation, php function __get, php __get lazy initialization, php lazy initialization, php __get switch, php5 private, php __get __set private protected, php property __get, php __get bug, php5 lazy, php property lazy initialization |

Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.