Mehrere PHP Fragen



  • Hallo, ich bin grade dabei PHP zu lernen. Nun habe ich auch schon gleich einen haufen Fragen. Mit den Grundlagen habe ich keine Probleme, da ich als Java Entwickler meine Brötchen verdiene.

    Nun zu meinen Fragen:

    Man sieht in Beispielcode meistens folgendes:

    $myObjekt = new Objekt;
    

    Allerdings soll folgendes besser sein(kein Kopiervorgang):

    $myObjekt = & new Objekt;
    

    Warum sieht man das kaum?

    Warum werden Strings nicht häufiger in ' anstatt " gesetzt? Hochkommata müssten schneller sein, da der parsing Vorgang für die Variablen wegfällt?

    Auch sieht man _sehr_ oft, dass String und sogar arrays By Value an Funktionen übergeben werden. Ebenfalls sieht man auch Rückgabewerte(von Methoden) nicht gerade häufig als Referenz. Dies ist mir nicht in irgendwelchen Skripten aufgefallen, sondern in der PEAR Bibliothek. Ist jetzt nicht Böse gemeint, aber haben viele PHP Entwickler einfach keine Ahnung? 😕

    Weiß Jemand wie das Speichermodell von PHP 5 aussieht? Muss man alten Code anpassen?

    Vielen Dank im Voraus!


  • Mod

    Gecko schrieb:

    Mit den Grundlagen habe ich keine Probleme, da ich als Java Entwickler meine Brötchen verdiene.

    Achtung: PHP macht einiges anders. Wie du an meinen Antworten gleich erkennen wirst 😉

    Man sieht in Beispielcode meistens folgendes:

    $myObjekt = new Objekt;
    

    Allerdings soll folgendes besser sein(kein Kopiervorgang):

    $myObjekt = & new Objekt;
    

    Warum sieht man das kaum?

    Weil Referenzen lahm sind. In PHP3 und 4 (PHP5 kenne ich noch nicht genau genug, da soll es aber besser sein) sind Referenzen extrem lahm. Ein kopieren ist in 95% der Fälle wesentlich schneller.
    Im Prinzip heisst das: wenn es geht, dann kopieren, Referenzen nur dann, wenn man wirklich Referenzen braucht (also 2 Variablen die auf die selben Daten 'zeigen').

    Warum werden Strings nicht häufiger in ' anstatt " gesetzt? Hochkommata müssten schneller sein, da der parsing Vorgang für die Variablen wegfällt?

    Weil es zu viele Deppen gibt 😞
    ' sind wesentlich besser als "

    Letztens habe ich in comp.lang.php mal ein Benchmark gesehen -> ' ist wesentlich schneller als ich dachte.

    Auch sieht man _sehr_ oft, dass String und sogar arrays By Value an Funktionen übergeben werden. Ebenfalls sieht man auch Rückgabewerte(von Methoden) nicht gerade häufig als Referenz. Dies ist mir nicht in irgendwelchen Skripten aufgefallen, sondern in der PEAR Bibliothek. Ist jetzt nicht Böse gemeint, aber haben viele PHP Entwickler einfach keine Ahnung? 😕

    Ne, Referenzen sind lahm. Das Erzeugen einer Referenz dauert meistens länger als das Kopieren.

    Bitte nimm dir pear nicht allzu sehr als Vorbild. Die Funktionalität ist zwar super - aber schön sind die Dinger sicher nicht.

    Weiß Jemand wie das Speichermodell von PHP 5 aussieht? Muss man alten Code anpassen?

    Im Prinzip nicht. Die Konstruktoren heissen jetzt anders, aber sonst hat sich nicht viel verändert.

    Das Speichermodell ansich, ist anders geworden. So sind Objekte nun wesentlich schneller 🙂 Es wird wie in Java gemacht: ein objekt ist nur eine Referenz auf die Daten - man braucht keine Kopien mehr, und Referenzen werden sehr schnell erzeugt.

    Abschliessend noch ein Tip:
    PHP ist eine sehr langsame Sprache, nix geht schnell. Schnell ist es nur, wenn man die Builtin Funktionen verwendet. zB ist ein for() um alle Daten eines Arrays anzusprechen wesentlich langsamer als ein foreach(). Also: lerne die Dokumentation kennen, denn es gibt ne Menge Funktion - die können dir nicht nur das Leben erleichtern, sondern auch den Code schneller machen.



  • [EDIT] Shade war schneller. [/EDIT]



  • Naja, also

    mit

    $myObjekt = new Objekt;

    erstellst du eine komplette variable im speicher, eine kopie.

    $myObjekt = &new Objekt;

    $myOject enthält jetzt nur eine referenz zum speicher des Objectes.

    Es dürfte Theorietisch nur einmal pro Object gehen, sonst greifst du immer auf die gleiche variable zu!!


  • Mod

    testerBBC schrieb:

    $myObjekt = &new Objekt;

    $myOject enthält jetzt nur eine referenz zum speicher des Objectes.

    ja

    Es dürfte Theorietisch nur einmal pro Object gehen, sonst greifst du immer auf die gleiche variable zu!!

    warum?

    Mittels new Objekt wird ein neues Objekt erstellt.
    Und ob ich mir das Objekt jetzt herhole und kopiere, oder einfach nur eine Referenz darauf speichere, ist ja egal.



  • 😮

    Danke!

    Hat Jemand von Euch Erfahrungen mit eigenen C-Extensions? Ich bin ernsthaft am überlegen, ob ich performance hunrige Module in C schreiben sollte?!?



  • Das mit eigenen Extensions fände ich auch recht interessant 😋


  • Mod

    Eigene Module zu schreiben ist eigentlich nicht nötig. Denn wenn es wirklich so performance intensiv ist - dann nehm ich gleich was kompiliertes. Da erspare ich mir ne Menge ärger mit den Modulen...

    Und schneller zu implementieren geht es wahrscheinlich auch.



  • Würde ich nicht allgemein so sagen. Es kommt sicherlich auf den Verwendungszweck an. Hat man z. B. ein großes CMS in PHP geschrieben und man merkt, dass man durch einige wenige Funktionen viel Performance rausholen kann, dann lohnen sich C-Extensions schon. Typische Kandidaten wären z. B. Template-Engines und große Datenauswertungen.

    Das der Zeitaufwand groß ist, würde ich auch nicht sagen. Ich habe mir mehrere Tutorials/Codes angeschaut und muss sagen, dass es sogar recht wenig Aufwand für den Nutzen ist.


Anmelden zum Antworten