dedlfix: "public static" in PHP 4.x und PHP 5.x

Beitrag lesen

echo $begrüßung;

ABER: auf meinem eigenen Rechner verwende ich [...] PHP 5.x [...] Der Provider [...] PHP 4.4.4 [...]. 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.

(Sichtbarkeitsmodifikatoren kommen nur im Zusammenhang mit Klassen vor. Funktionen werden in Klassen aber Methoden genannt, um sie auch sprachlich von nicht-klassengebundenen Funktionen abzuheben.)

Wenn du ein Klassen verwendendes Script so schreibst, dass die neuen PHP5-Features in der reinen PHP5-Art verwendet, dann läuft, wie du bemerkt hast, es unter PHP 4 nicht mehr. Schreibst du es PHP4-kompatibel entspricht das nicht mehr in jedem Fall dem neuen PHP5-Klassen-Konzept. Möchtest du dennoch PHP4-kompatible Klassen unter PHP5 einsetzen, solltest du E_STRICT ausschalten, ...

"<b>Strict Standards</b>:  Non-static method Formular::gaestebuch() should not be called statically, assuming $this from incompatible context [...]

... damit unter anderem solche Meldungen nicht mehr auftauchen.

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:

(Die richtigere Terminologie wäre: Sie ruft eine statische Klassenmethode auf.) Methoden, die statisch aufgerufen werden sollen, müssen, um E_STRICT-kompatibel zu sein, als static gekennzeichnet werden. Unter PHP4 war es egal, ob eine Methode dynamisch (à la $this->methode()) oder statisch (à la klasse::methode()) aufgerufen wurde. PHP5 will nur noch eine von beiden Aufrufarten und das auch so gekennzeichnet haben, um E_STRICT-kompatibel zu sein.

echo "$verabschiedung $name";