wann " und wann '?



  • Hi,

    ich versuch darüber grade eine Richtlinie auf php.net zu finden, gibt es aber irgendwie keine?

    Daher meine Frage: Wann " und wann '?

    Wenn man strickt nach C und C++ geht dann nur " bei Strings und ' bei einzelnen Zeichen.

    Gibt es dafür eine Richtlinie?



  • ehm, ich weiß nur das man mit ' IN Strings arbeiten sollte statt \" und mit / statt \! Das hat bei mir nämlich zu Probs geführt 🤡



  • Ich verwende meistens ' für Strings und " wenn sie Variablen oder Escape-Sequenzen wie \r oder \n erhalten. Im Grunde ist es relativ egal welche der Strings du verwendest, solange du ordentlich arbeitest. Auf Backslashes musst du ohnehin bei beiden Versionen achten. In Sachen Performance macht es auch kein Unterschied, da "abc $blubb def" intern in 'abc ' . $blubb . ' def' umgewandelt wird.

    Falls du es noch nicht weißt:
    In '-Strings werden Variablen und alle Escape-Sequenzen außer \\ und \' als Text behandelt, also nicht umgewandelt.



  • Es ist schneller wenn du ' in Verwendung mit dem .-Operator verwendest. Macht zwar denke ich nicht viel aus, aber imo ist das übersichtlicher.



  • Aber es gibt keine richtlinie dafür?! ist ja doof 😞



  • Nein, wieso sollte es?
    Es gibt ja auch keine Richtlinie, ob man if($test) oder if( $test ) schreiben muss.

    Der Text in "" wird schlichtweg im Gegenteil zu einem in '' geparst (wie Neku schon sagte), wann du was nutzt ist völlig dir überlassen; bzw. den Gegebenheiten nach.



  • Weil es doch für jeden Scheiss richtlinien gibt?!



  • kkkkkkkkkkkkkkkkk schrieb:

    Es ist schneller wenn du ' in Verwendung mit dem .-Operator verwendest. Macht zwar denke ich nicht viel aus, aber imo ist das übersichtlicher.

    Genau das ist es nicht. Wenn du mir nicht glaubst schau dir die Parser-Dateien vom PHP-Source an.



  • Neku schrieb:

    kkkkkkkkkkkkkkkkk schrieb:

    Es ist schneller wenn du ' in Verwendung mit dem .-Operator verwendest. Macht zwar denke ich nicht viel aus, aber imo ist das übersichtlicher.

    Genau das ist es nicht. Wenn du mir nicht glaubst schau dir die Parser-Dateien vom PHP-Source an.

    Unsinn, denn genau das ist es. Wenn du mir nicht glaubst, bemüh mal dein Hirn (oder Google). Glaubst du das Parsen eines ""-Strings geht kostenlos und das ''-Äquivalent fällt einfach so vom Himmel? 🙄



  • In der Tat war die ""-Variante bis PHP Version 5 (4.x?) wesentlich langsamer als die ''-Version. Aber inzwischen wird der gröbste Overhead wegoptimiert. Gänzlich entfallen tut er aber - logisch wie technisch bedingt - nicht.



  • Der vorhandene Overhead hat es aber durchaus in sich. Deine Behauptung, es gäbe keinen relevanten Performance-Unterschied, gilt für Skripte auf deinem lokalen Rechner. Aber sobald's an's Eingemachte geht und eine Webseite z.B. tausende Aufrufe hat, merkt man den Unterschied doch sehr deutlich.
    Um sich mal einen Eindruck zu machen: http://blog.libssh2.org/index.php?/archives/28-How-long-is-a-piece-of-string.html



  • Das sie "nicht relevant" wären habe ich auch nicht gesagt 😉
    Naja gut, etwas zu euphemistisch hab ich's vielleicht schon beschrieben 🙄

    Übrigens sehr guter Link!



  • Wieso sollte es für PHP einen nicht-vernachlässigbaren Unterschied machen, ob es Variablen innerhalb oder außerhalb eines Strings geparst werden? Beides erledigt der Lexer.
    Bei 'abc ' . $blubb . ' def' erkennt der Lexer: konstanter String, Operator, Variable, Operator, konstanter String. Bei der Ausführung werden zwei Strings und die Variable durch den .-Operator verbunden.
    Bei "abc $blubb def" erkennt der Lexer: String, Variable, String. Im Parser wird nun das Verhalten für in Strings enthaltenen Variablen definiert - die Variable wird ersetzt. Die Variablen werden nicht bei der Ausführung geparst.
    Wer mir noch immer nicht glaubt kann sich gerne die Dateien Zend\zend_language_scanner.l und Zend\zend_language_scanner.y ansehen.

    Hinweis: Bei meinen Angaben geht es um PHP 5.2.



  • Aber 'blubb ohne variable' ist schneller als "blubb ohne variable", und um das geht es hier.

    MfG SideWinder



  • Nein, es ging um das oben genannte Beispiel.

    *edit*
    Habe gerade nochmal nachgesehen. Bei deinem Beispiel ist der Unterschied ebenfalls vernachlässigbar, da "-Strings, die keine $-Zeichen enthalten, wie '-Strings nur mit einem einzigen Regex gelesen werden.


Anmelden zum Antworten