Hallo Tom,
hat sich von Euch schon mal jemand mit dem Unterschied zwischen festen und bedingten includes bei PHP beschäftigt?
Es gibt keinen Unterschied (außer natürlich der Tatsache, dass die Bedingung selbst noch ausgewertet werden muss). PHP arbeitet immer nach dem folgenden Schema: 1) Datei kompilieren in Opcodes. 2) Opcodes ausführen. (Schritt 1 kann mit Opcode Caches übersprungen werden) Sobald er auf einen Include-Opcode kommt, dann wird der ausgeführt und die Datei ausgelesen - vorher nicht. Wenn die Bedingung true ist, gibt es also keinen Unterschied zwischen dem include in der Bedingung und dem include außerhalb. Nur wenn die Bedingung false ist, wird halt das include gespart, d.h. die Datei nicht eingelesen (was aber auch logisch sein sollte...).
Eines der Ziele dabei ist es, Arbeitsspeicher zu sparen.
Was stellst Du denn an, damit das schon relevant wird? Wie viel Code willst Du denn laden? Selbst große Frameworks wie das Zend Framework o.ä. kommen mit den bestehenden Speicherlimitationen sehr gut zurecht...
Wann kann ich davon ausgehen, dass der Speicher wieder freigegeben wird und welcher?
PHP gibt am Scriptende grundsätzlich allen Speicher frei, der im Script alloziert wurde (memcache, persistente Verbindungen und Opcode Caches im SHM sind die Ausnahmen).
Der für die Deklaration der Funktionen oder Klassen wird wohl bis zum Scriptende verloren bleiben, oder?
Ja, Funktionen und Klassen leben so lange wie das Script.
Nicht mehr benutzte Objekte und Variablen müssten sich entfernen lassen, soweit sie nicht automatisch entsorgt werden? Welche regeln gelten hier?
Ich verstehe den Satz nicht. Generell gilt: Wenn eine Variable nicht mehr verwendet wird (weil die Funktion z.B. beendet wird), dann werden alle mit der Variablen assoziierten Resourcen freigegeben. Für Objekte werden zusätzlich noch eventuell definierte Destruktor-Funktionen aufgerufen, bei Resourcen gibt's intern sowas ähnliches (daher muss man Dateien in PHP auch nicht immer explizit schließen). Wenn Du etwas explizit loswerden willst, nimm unset().
Was willst Du eigentlich anstellen? Mich dünkt stark, dass Du Deinen Code immer noch stark mikrooptimieren willst, obwohl ich ja immer noch auf eine Antwort auf mein Posting dazu warte...
Viele Grüße,
Christian