dedlfix: Statik und Dynamik

Beitrag lesen

Tach!

Klassen und Klassenvariablen sind statische Gebilde, Instanzen hingegen nicht. Jetzt nehmen wir mal an, daß eine Klassenvariable bei jeder Instanzerstellung um 1 erhöht wird. Genau das zeigt ja das statische Verhalten: Jede neue Instanz findet diese Variable so vor wie sie von der letzten Instanz verlassen wurde.

Ganz genauso wie die diese Zählvariable verhält es sich auch mit anderen Variablen die klassenweit deklariert wurden, also bspw. auch prepared Statements, Templates und auch die DB Verbindung selbst.

Schön und gut, aber wenn das was mit Caching zu tun haben soll, muss der Speicher auch bestehenbleiben. Das ist bei PHP nicht der Fall.

So könnten in mod_php bereits beim Serverstart sämtliche Templates in den Hauptspeicher geladen werden was eine Klasse Templates tun könnte wenn sie beim Serverstart kompiliert wird.

Nein, das kann nicht, weil beim Serverstart keinerlei Scripte ausgeführt werden. Zudem gibt es in PHP keinen globalen Speicher, auf den von unterschiedlichen Requests aus zugegriffen werden könnte. Selbst wenn also beim Start ein Script ausgeführt werden würde, gibt es keine Möglichkeit, innerhalb einer Request-Bearbeitung auf dessen Daten zuzugreifen. Vielleicht ist das bei Perl oder mod_perl so, aber nicht in PHP oder mod_php oder PHP unter FCGI oder FPM.

Es gibt lediglich zusätzliche Extensions, wie beispielsweise APC U(ser Cache), denen man über entsprechende Funktionsaufrufe Daten zum Speichern übergeben und wieder holen kann. Das ist ein Key-Value-Speicher und das Prozedere dazu ist auf gewisse Weise ähnlich wie Daten in ein DBMS zu speichern und von dort zu holen.

Bei mod_php muss Du jedoch aufpassen daß persönliche Daten ($_SESSSION) nicht im Speicher hängenbleiben.

Es bleiben bei PHP gar keine Daten im Speicher hängen, wenn ein Request beendet wird. Weder in $_SESSION noch in irgendwelchen anderen Variablen. Es gibt dieses Verhalten in anderen Systemen (z.B. ASP.NET), aber nicht in PHP.

dedlfix.