Objektorientierung in PHP?

Objektorientierung in PHP?

am 16.10.2006 05:52:25 von Christian Franzen

Hi!

Ich arbeite momentan erstmals an einem Projekt bei dem es sich aufgrund der
Komplexität lohnen würde die OO Features von PHP zu nutzen. Allerdings ist
das Projekt sehr Rechenleistungsintensiv (Browsergame), weshalb ich Frage
wollte, ob die OO Features von PHP das ganze nicht noch schlimmer machen.
Gibt es dahingehende irgendwelche Daten, ob PHP bei der Benutzung von z.B.
Klassen mehr Rechenleistung verbraucht als wenn man die selbe Aufgabe ohne
Klassen realisieren würde?

mfg Xion

Re: Objektorientierung in PHP?

am 16.10.2006 09:33:08 von thorny

Christian Franzen schrieb:

> Ich arbeite momentan erstmals an einem Projekt bei dem es sich aufgrund der
> Komplexität lohnen würde die OO Features von PHP zu nutzen. Allerdings ist
> das Projekt sehr Rechenleistungsintensiv (Browsergame), weshalb ich Frage
> wollte, ob die OO Features von PHP das ganze nicht noch schlimmer machen.
> Gibt es dahingehende irgendwelche Daten, ob PHP bei der Benutzung von z.B.
> Klassen mehr Rechenleistung verbraucht als wenn man die selbe Aufgabe ohne
> Klassen realisieren würde?

Das läßt sich ganz allgemein beantworten: Jein.

Das OOP langsam ist, ist ein weit verbreitetes Vorurteil. Wenn du OOP
vernüftig betreibst, wirst du einen Unterschied kaum merken. Wenn du es
nicht vernüftig betreibt, schon. Das läßt sich auf jede Sprache
ausdehnen. Letztlich ist es nur eine Form seinen Code anzuordnen.

Für ein größeres Projekt wie ein Browserspiel (willkommen im Club) ist
aber die Wartbarkeit wichtiger, als die letzte Performancesteigerung.
Wenn du vernüftig mit PHP arbeitest, wird es schnell sein.

Gruß,
Torsten

Re: Objektorientierung in PHP?

am 16.10.2006 10:12:55 von do.not.REMOVETHAT

Christian Franzen schrieb:

> Allerdings ist
> das Projekt sehr Rechenleistungsintensiv (Browsergame), weshalb ich Frage
> wollte, ob die OO Features von PHP das ganze nicht noch schlimmer machen.

In PHP4 würde ich darum eher einen Bogen machen. Ab 5 sollte es aber
gehen. Bei PHP4 bin ich schon oft auf Grenzen gestossen, weil der
Interpreter den Speicher nicht frei gab nachdem Objekte nicht mehr
gebraucht wurden.

Grüße, Matthias

--
http://www.trullala.de
--
Der Trend geht ganz eindeutig zur Zweitsignatur.

Re: Objektorientierung in PHP?

am 16.10.2006 10:19:03 von GreenRover

Matthias P. Wuerfl schrieb:
> Bei PHP4 bin ich schon oft auf Grenzen gestossen, weil der
> Interpreter den Speicher nicht frei gab nachdem Objekte nicht mehr
> gebraucht wurden.
Auch wenn du das Object mit unset()gelöscht hast?!
Denn mir ist es bis jetzt noch nicht aufgefallen.

Re: Objektorientierung in PHP?

am 16.10.2006 10:48:16 von thorny

Heiko (GreenRover) Henning schrieb:

>> Bei PHP4 bin ich schon oft auf Grenzen gestossen, weil der Interpreter
>> den Speicher nicht frei gab nachdem Objekte nicht mehr gebraucht wurden.
>
> Auch wenn du das Object mit unset()gelöscht hast?!
> Denn mir ist es bis jetzt noch nicht aufgefallen.

Wird die Antwort auf solche Behauptung nicht langsam zum Mantra?

Nur weil man diverse Objekte löscht, Variablen dereferenziert usw. heißt
das nicht, dass der GC auch den Speicher wieder frei gibt. Häufig
"behält" er den Speicher, um ihn für andere Variablen vorzuhalten, da
dies performanter ist, als ständig speicher zu befreien und ihn dann
wieder zu allozieren.

Gruß,
Torsten

Re: Objektorientierung in PHP?

am 16.10.2006 10:53:55 von GreenRover

Torsten Zuehlsdorff schrieb:
> Wird die Antwort auf solche Behauptung nicht langsam zum Mantra?
Es ist halbwegs klar, das der Speicher nicht "freigegeben" wird für
andere Anwendungen, aber PHP Ihn selber wieder benutzt.
Ich bin zumindest der Überzeugung das es recht gut funktioniert. Da ich
auch 1-2 Speicher hungrige Anwendungen habe, die im gegenteiligen Fall
doch noch 1-2 MB mehr fressen würden..

Re: Objektorientierung in PHP?

am 16.10.2006 11:18:18 von do.not.REMOVETHAT

Heiko (GreenRover) Henning schrieb:

>> Bei PHP4 bin ich schon oft auf Grenzen gestossen, weil der Interpreter
>> den Speicher nicht frei gab nachdem Objekte nicht mehr gebraucht wurden.
> Auch wenn du das Object mit unset()gelöscht hast?!

Ja. Wenn ich mehrere Dateien barbeitet habe (Tagsoup-Parser in PHP),
dann wurde nach ein paar Dateien der Speicher voll. Ich habe stundenlang
mit unset() und Konsorten rumgebastelt, hat alles nix genutzt. Bei
reiner prozeduraler Programmierung ist mir das noch nie passiert, obwohl
ich da auch schon Scripte geschrieben habe die Tage liefen und durch die
einiges an Daten durchgingen.

Wie gesagt: PHP4

Grüße, Matthias

--
http://www.trullala.de
--
Der Trend geht ganz eindeutig zur Zweitsignatur.

Re: Objektorientierung in PHP?

am 16.10.2006 11:53:11 von thorny

Matthias P. Wuerfl schrieb:

>>> Bei PHP4 bin ich schon oft auf Grenzen gestossen, weil der
>>> Interpreter den Speicher nicht frei gab nachdem Objekte nicht mehr
>>> gebraucht wurden.
>>
>> Auch wenn du das Object mit unset()gelöscht hast?!
>
> Ja. Wenn ich mehrere Dateien barbeitet habe (Tagsoup-Parser in PHP),
> dann wurde nach ein paar Dateien der Speicher voll. Ich habe stundenlang
> mit unset() und Konsorten rumgebastelt, hat alles nix genutzt. Bei
> reiner prozeduraler Programmierung ist mir das noch nie passiert, obwohl
> ich da auch schon Scripte geschrieben habe die Tage liefen und durch die
> einiges an Daten durchgingen.
>
> Wie gesagt: PHP4

Finde die komplette Versionsnummer heraus und poste das als Bug ;)
Probleme mit dem GC sind zwar selten, kommen aber vor.

Gruß,
Torsten