Johannes Zeller: "public static" in PHP 4.x und PHP 5.x

Beitrag lesen

Hallo Christoph,

ABER: auf meinem eigenen Rechner verwende ich einen Apache 2.2.3 und wahlweise PHP 5.x oder eine Developer-Version (PHP 6.x). Der Provider stellt einen Apache 1.3.34 und PHP 4.4.4 zur Verfügung. Meine PHP-Scripts, in denen ich manche PHP-Funktionen als "private", manche als "public" oder als "public static" gekennzeichnet hatte, laufen lokal damit auch völlig zufriedenstellend. Die online-Fassung meckerte aber andauernd, so daß ich schließlich erstmal alle "public" usw. streichen mußte. Damit läuft es auch beim Provider

Ja, das liegt daran, dass PHP 4 mit public, private (und protected) nichts anfangen kann, weil sie mit PHP 5 eingeführt wurden. Siehe auch Appendix B. Migrating from PHP 4 to PHP 5.

Aber damit läuft es lokal bei mir nicht mehr. Ich bekomme beispielsweise, wenn ich mein Gästebuchscript laufen lasse, lokal erstmal eine Meckerei: "<b>Strict Standards</b>:  Non-static method Formular::gaestebuch() should not be called statically, assuming $this from incompatible context in <b>G:\phpseite\basis\Vorlagen.class.php</b> on line <b>234</b><br />" - die angemeckerte Zeile sieht so aus:

Ja, denn statische Methoden gab es schon in PHP 4. Wenn du Methoden über den Klassennamen aufrufst und nicht über ein konkretes Objekt, müssen diese Methoden statisch sein.

Ich habe nun sowieso etwas Verständigungsprobleme, was die Verwendung solcher Angaben wie "public" oder "private" angeht und finde dazu übrigens auch im Handbuch keine ausreichende Erklärung (aber da hab ich in den letzten Tagen vielleicht nur nicht die richtigen Suchbegriffe probiert).

* public - Hierauf kann von überall zugegriffen werden
* private - Diese Methode kann nur von innerhalb der Klasse angesprochen werden
* protected - Diese Methode ist nur innerhalb der Klasse und in von ihr abgeleiteten Unterklassen sichtbar

Ich korrigiere das, wenn es eine Meckerei gibt, dann ist es wieder gut, aber man möchte ja gleich Code schreiben, der keinen Anölaß zu derlei Meckereien gibt. Kurz: wann und warum sind solche Bezeichnungen als "private" oder "public static" für Funktionen sinnvoll?

Wenn du sicher sein kannst, dass dein Code nicht mehr unter PHP 4 laufen muss ;-)

Schöne Grüße,

Johannes