Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Hi "Folks",

wie in einem anderen Thread schon angedeutet, bin ich jetzt nach jahrelanger Java- und C#-Programmierung bei PHP "gelandet" .. soz. meiner ersten (Server) Interpretersprache. Ich verstehe ein paar Sachen noch nicht so richtig.

a) Ist es denn WIRKLICH so, dass bei JEDEM Aufruf alle Scripte (auch alle Includes) komplett wieder neu geladen werden. Ich kann mir einfach nicht vorstellen, dass da keine Optimierungsroutinen (ggf. Apache Server) vorhanden sind. Ich als "normaler" Programmierer würde da was einbauen. Wer weiß etwas genaues, ggf. einen Link darüber?

B) Wenn a) wahr ist, dann ist es doch "schwachsinnig" objektorientiert zu programmieren, bzw. Frameworks (wie Zend, Symfony oder CakePHP) zu verwenden, die ja intern "exzessiv" Reflection einsetzen, die ja bekanntlich auch "verdammt" teuer ist.

c) kann man irgendwo (php.ini?) einstellen, dass Variablen deklariert (bzw. definiert) werden müssen, das ist ja total nervig, wenn man (wie bei JavaScript) "einfach so", wegen z.B. Schreibfehler, Variablen definiert.

d) Wer von euch kennt PDT (Eclipse) und wer kennt Zend Studio? Lohnt hier der Umstieg von PDT auf Zend Studio. Ist der Debugger mächtiger, bzw. kann ich während des debuggens (Haltepunkt) auch Functions/Methoden ausführen (wie ich es mit Java auch kann)

e) Ich verstehe das Prinzip der static Methoden nicht, denn wenn a) wahr ist, was nützt mir dann eine static-Methode oder ggf. Singletons, wenn das Script sowieso wieder neu geladen wird. Bei Java und C# ist es ja so, dass nach der ersten Initialisierung das "Teil" im Speicher ist, bis die Anwendung beendet wird, oder der Server runtergefahren wird. Wer kann mich hier aufklären?

Danke schon mal im voraus für Antworten.

Gruß

Geschrieben

Hallo,

a) Ist es denn WIRKLICH so, dass bei JEDEM Aufruf alle Scripte (auch alle Includes) komplett wieder neu geladen werden. Ich kann mir einfach nicht vorstellen, dass da keine Optimierungsroutinen (ggf. Apache Server) vorhanden sind. Ich als "normaler" Programmierer würde da was einbauen. Wer weiß etwas genaues, ggf. einen Link darüber?

Es ist tatsächlich so, dass alle Scripte bei jedem Aufruf neu eingebunden werden. PHP ist eine reine Interpretersprache, d h. der Code wird jedes Mal eingelesen, analysiert und ausgeführt. Das mag auf den ersten Blick nicht performant sein, aber es gibt auch dafür Möglichkeiten durch Einsatz diverser Cache-Systeme (APC, eAccelerator, memcache usw.). Dabei werden die Sourcen auch vorkompiliert und im Speicher abgelegt.

B) Wenn a) wahr ist, dann ist es doch "schwachsinnig" objektorientiert zu programmieren, bzw. Frameworks (wie Zend, Symfony oder CakePHP) zu verwenden, die ja intern "exzessiv" Reflection einsetzen, die ja bekanntlich auch "verdammt" teuer ist.

Auch wenn PHP-Code nicht gecached wird, ist die OO-Programmierung trotzdem Sinnvoll. OOP muss ja nicht unbedingt den Compilersprachen vorenthalten sein. Natürlich leidet die Performance bei Einsatz von Frameworks, Abstraktion/Kapselung ist eigentlich immer mit Performanceverlust verbunden, dafür erhöht sich die Wartbarkeit der Scripte. Bei komplexen Projekten ist das bis zu einem gewissen Grad wichtiger als die Performanceeinbuße, der man mit Codeoptimierung, Caching oder Hardware entgegenwirken kann.

c) kann man irgendwo (php.ini?) einstellen, dass Variablen deklariert (bzw. definiert) werden müssen, das ist ja total nervig, wenn man (wie bei JavaScript) "einfach so", wegen z.B. Schreibfehler, Variablen definiert.

Der Fehlerlevel lässt sich in der php.ini einstellen, ist es auf E_STRICT gesetzt, wird einiges vom Interpreter bemängelt, auch der Zugriff auf Variablen, die vorher nicht initialisiert wurden. Eine explizite Deklaration einer Variablen wie in Java ist nicht möglich. Die Option sorgt E_STRICT dafür, dass z. B. $foo=1; echo $Foo; zur einer Fehlermeldung führt, sofern $Foo nicht schon vorher initialisiert wurde.

d) Wer von euch kennt PDT (Eclipse) und wer kennt Zend Studio? Lohnt hier der Umstieg von PDT auf Zend Studio. Ist der Debugger mächtiger, bzw. kann ich während des debuggens (Haltepunkt) auch Functions/Methoden ausführen (wie ich es mit Java auch kann)

PDT ist auf jeden Fall empfehlenswert, ob sich der Umstieg zu Zend Studio lohnt, hängt eher von den jeweiligen Anforderungen an die IDE ab. Unter Zend Studio - Versionsvergleich - Zend.com gibt es einen Vergleich von beiden Entwicklungsumgebungen. Nach der Installation von manchen Plugins (Subclipse, Aptana) stehen einige Funktionalitäten auch unter PDT zur Verfügung. Meines Wissesns ist das Debuggen unter Zend Studio besser. Ob damit an Haltepunkten das Ausführen von Functions/Methoden möglich sind, kann ich dir nicht sagen.

e) Ich verstehe das Prinzip der static Methoden nicht, denn wenn a) wahr ist, was nützt mir dann eine static-Methode oder ggf. Singletons, wenn das Script sowieso wieder neu geladen wird. Bei Java und C# ist es ja so, dass nach der ersten Initialisierung das "Teil" im Speicher ist, bis die Anwendung beendet wird, oder der Server runtergefahren wird. Wer kann mich hier aufklären?

Static Methoden/Eigenschaften sind ja dafür gedacht, um diese auch ohne vorherige Instanzierung der Klasse verwenden zu können. Auch wenn die Scripte jedes mal neu geladen werden, kann man mit PHP die Vorteile von statischen Methoden/Eigenschaften verwenden. Das Singleton Pattern wird dort eingesetzt, wenn z. B. eine Instanz eines Objektes nur einmal pro Scriptaufruf erstellt werden soll. Bei komplexen Projekten kommt es schon mal vor, das sehr viele Sourcen includiert werden und wenn eine DB-Connection dann an 10 verschiedenen Stellen nötig ist, wird durch Einsatz von Singleton, das Objekt nur einmal Instanziert, also eine Verbindung aufgebaut.

Auch wenn in Java oder C# die Sourcen vorkompiliert werden, werden alle benötigen Objekte bei jedem Aufruf unter Java und C# genauso neu erstellt. Das Speichern von Objekten (inkl. aktuellem Zustand) ist wie in Java oder C# auch in PHP möglich.

Es sind doch einige Unterschiede zwischen PHP und Java oder C#, dennoch kann man mit PHP mittlerweile einiges anstellen - wünsche dir auf jeden Fall viel Spass damit.

Gruß

xmurrix

Geschrieben

a:)

du hast gerade herausgefunden was ich an PHP noch vermisse ,)

b:) wie mein vorredner schon getippt hat, geht es hier mehr um Flexibilität, du kannst langsame algorythmen erheblich schneller zur schnellere ersetzen, wenn es entsprechende optimierungen gibt.

c:) ist eigentlich eine der stärken von PHP, du musst nicht alle Buffer-Variablen behalten, sondern kannst sie nach dem umwandeln behalten oder ihren typ ändern. das deklarieren von Variablen ist anschließend mehr eine erziehungsfrage :)

e:)

du hast pro aufruf immer nur 1 Request, 1 Response, 1 Datenbank .... und meistens noch eine ganze reihe mehr die nur einmal vorkommen dürfen, aber überall gebraucht werden. Damit du nicht in das Chaos von GLOBAL verfällst, ist Static und Singleton eine gute alternative.

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...