PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   PHP Grundlagen (http://www.selfphp.de/forum/forumdisplay.php?f=12)
-   -   Klassen & Geschwindigkeit (http://www.selfphp.de/forum/showthread.php?t=4063)

Sadrak 21.04.2003 19:37:58

Klassen & Geschwindigkeit
 
So, ich hätte da mal ne Frage *g*

Ich programmiere ein Spiel in PHP, nun ist die Frage wie ich die statischen Variablen wie z.b. die baukosten abspeichern soll. Aktuell habe ich dafür eine Klasse gemacht (Name: get_var) und in ihr halt 30 funktionen so wie z.b. geb_kosten

wenn ich nun get_var::geb_kosten("schmiede") aufrufe, bekomme ich nen array mit allen Daten zurück. Nur, wie ist das mit der Geschwindigkeit. Oft ist es so, das ich nur eine funktion aus der ganzen Klasse brauche, diese aber immer Laden muss mit include. Sollte ich mehrer spezielle Klassen machen oder wie wäre es am besten zu lösen?

MfG

Sadrak 21.04.2003 19:40:49

zusatz:

Wo kann ich dazu was lesen mit speicherverbrauch etc. Wenn ich ne Datei include, wird die dann komplett in den Speicher geladen?

Dago 21.04.2003 20:19:23

Mit include() wird eine Datei bei jedem Aufruf neu ausgelesen und geparst.
Tipp:
Besser include_once(), require_once() oder require() verwenden, dann bleibt der geparste Programmcode auch im Speicher - zumindest bei der Modul-Version von PHP...

Sadrak 21.04.2003 20:57:16

Ich mache pro Script auf jeden fall nur ein include, zwei gehen ja auch garnicht, dann nervt der ja sofort, das er die Klasse schon hat. Was meintest du mit der Modul-Version von PHP ... wo kann ich sehen ob ich das habe? Und wie könnte ich das dann nutzen?

Dago 21.04.2003 21:11:37

Es gibt zwei gängige Varianten, PHP laufen zu lassen:
- über das Server Advanced Programable Interface (Apache-Modul)
und
- über das Common Gateway Interface

Bei der API-Version bleibt der PHP-Interpreter die ganze Zeit über im Speicher und kann die Skripte, die er irgendwann schonmal geparst hat, sehr schnell ausgeben, da sie zwischengespeichert werden (und nur erneut geparst werden, wenn sich die Skript-Datei geändert hat). Das geschieht ganz automatisch, ohne jegliches Zutun.
Bei der CGI-Variante wird der Interprter nur bei Anfrage auf ein Skript vom Server gestartet und danach gleich wieder beendet - klar dass da nichts zwischengespeichert werden kann. Es gibt allerdings auch CGI-PHP, dass sich wie das API-PHP verhält, z.B. muss soetwas bei Puretec laufen (frag mich nicht, wie die das machen...).

Ob dein PHP als API oder als CGI läuft erfährst du durch einen Aufruf von phpinfo().

Sadrak 22.04.2003 01:16:58

OK, danke :)


jetzt ist nur noch die eigentliche frage zu klären *g* wie mache ich das jetzt? *g*

eine große Klasse mit zum schluss 200 funktionen oder 5 klassen mit 40 funktionen?

letztenslich wird bei der API klasse ja dann eh immer alles geladen sein, ist es dann egal ob alles in einer klasse steht oder aufgeteilt auf mehrer?

Dago 22.04.2003 11:05:53

Sollte im Endeffekt eigentlich auf das Gleiche hinauslaufen. Aber rein vom Programmierstil her, würde ich nur das inkludieren, was ich auch wirklich brauche.

Sadrak 22.04.2003 11:18:00

naja, das ist klar, aber insgesamt wird doch alles geladen bleiben.

Ich werde es wohl noch aufgliedern, sprich 5 Klassen machen, für jede Kategorie eine und dann je nachdem was der Spieler gerade macht das entsprechende in dem Script includen. include_once lohnt sich doch auch nur, wenn man keinen überblick über seinen Code hat oder? *g*

Dago 22.04.2003 11:37:12

Nein, include_once cached die Datei schon, im Gegensatz zum rohen include()...
Der Unterschied zum require() ist allerdings, dass dies zur Laufzeit des Skripts ausgeführt wird.
require() könntest du sogar in
PHP-Code:

if (== 2) { //Tritt niemals ein *g
    
require('test.php');


schreiben, und Test test.php würde trotzdem inkludiert werden...

Berichtigung: Sorry, war Quatsch......
Ich meinte, das mal irgendwo gelesen zu haben... Hab's eben getestet -> funzt nicht.
Ähm, vergiss einfach, was ich geschrieben hab ;o)


Alle Zeitangaben in WEZ +2. Es ist jetzt 09:39:00 Uhr.

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.