Christoph Schnauß: "public static" in PHP 4.x und PHP 5.x

Beitrag lesen

hallo Forum,

ich habe den Ansatz dieser Frage zwar bereits in meinem Thread https://forum.selfhtml.org/?t=143074&m=929313 angesprochen, so daß jemand, der sehr streng sein wollte, sofort "Doppelposting" schreien dürfte. Allerdings hat sich der Thread sehr schnell thematisch anders entwickelt.

Mir geht es um folgendes: ich habe in einem PHP-basierten Projekt (jaja, es ist ein technischer Revisionsentwurf meiner eigenen Seite) mit dem Vorlagensystem Smarty experimentiert - und erfolgreich experimentiert. Also habe ich (fast) alle Projektfiles auch hochgeladen. Funktioniert.

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.

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:
  function Gaestebuch() {Formular::gaestebuch();exit;}
Das heißt, sie ruft eine Funktion aus einer anderen (Klassen-)Datei auf, und in der steht wiederum:
  public function gaestebuch() { ... }
Bei meiner Seitenkonstruktion hat das übrigens den Effekt, daß durch die Meckerei ein horizontaler Scrollbalken entsteht (in Opera). Die Fehlermeldung steht nur im Quelltext, aber _vor_ der DOCTYPE-Deklaration.

Mit PHP 4.4.4 bei der online gestellten Fassung passiert das nicht.

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). 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?

Grüße aus Berlin

Christoph S.

--
Visitenkarte
ss:| zu:) ls:& fo:) va:) sh:| rl:|