Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Frage zur Syntax und zu Verkettungsoperatoren

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] Frage zur Syntax und zu Verkettungsoperatoren

    Hallo zusammen,

    Da ich demnächst ein längerfristiges Seminar besuche, an dessen Ende die WE-Prüfungen stehen, wollte ich mich vorab schon mal etwas in die Materie einarbeiten und stoße dabei bereits auf die ersten Hürden. Voraustellen möchte ich hier ein paar Prämissen, die ich mir angelesen habe und die hoffentlich richtig sind:

    - Der Inhalt zwischen einfachen Anführungszeichen wird exakt so im Browser dargestellt wie geschrieben.

    - Der Inhalt zwischen doppelten Anführungszeichen wird geparst und bei Variablen das Ergebnis zurückgeliefert.

    - Der Verkettungsoperator (.) dient zum Verbinden von Strings, so dass bei der Ausgabe von Variablen nicht jedesmal ein <echo> angegeben werden muss.

    PHP-Code:
    <?php

    // Variablen
      
    $vorname "Heinz";
      
    $name "Schmidt";

      
    // Erstes Beispiel
      
    echo "<p> Herzlich willkommen $vorname $name zum PHP-Kurs</p>";

      
    //Zweites Beispiel
      
    echo "<p> Herzlich willkommen $vorname ".$name." zum PHP-Kurs</p>";

      
    //Drittes Beispiel
      
    echo '<p> Herzlich willkommen ".$vorname." ".$name." zum PHP-Kurs</p>';

      
    // Vierte Beispiel
      
    echo 'Herzlich willkommen '.$vorname." ".$name.' zum PHP-Kurs';

       
    // Viertes Beispiel - funktioniert nicht
      
    echo "Herzlich willkommen" ".$vorname." ".$name." "zum PHP-Kurs";

      
    // Fünftes Beispiel - funktioniert nicht
      
    echo "Herzlich willkommen " .$vorname' ' .$name." zum PHP-Kurs";
    ?>
    Im ersten Beispiel stehen zu Anfang und Beginn der Zeile doppelte Anführungszeichen, ohne dass ich einen Verkettungsoperator benutzt habe und die Ausgabe funktioniert einwandfrei.

    Beim zweiten Beispiel habe ich auch doppelte Anführungszeichen genutzt, die Variablen einmal mit und eine ohne Verkettungsoperator benutzt und die Ausgabe funktioniert trotzdem.

    Beim dritten Beispiel sind es einfache Anführungszeichen für die gesamte Zeile und die Variablen stehen in doppelten. Ausgegeben werden hier nur die Textstrings. Gibt es eine Hierachie, bei der doppelte Anführungszeichen ignoriert werden, sofern diese von einfachen umschlossen sind?

    Das vierte Beispiel habe ich einem Buch entnommen. Hier stehen überall einfache Anführungszeichen und lediglich der Freiraum zwischen den beiden Variablen ist von doppelten eingeschlossen. Warum das nun funktioniert, ist mir schleierhaft.

    Die Beispiele fünf und sechs sind von der Schreibweise her der Umkehrschluss zum vierten und funktionieren beide nicht.

    Ich könnte das jetzt noch mit weiteren Beispielen versuchen, aber im Prinzip läuft es darauf hinaus, dass mir die Logik des Ganzen, analog zu den eingangs aufgestellten Prämissen, noch nicht klar ist. Wann benutze ich welche Anführungszeichen, sind Verkettungsoperatoren wirklich notwendig und warum funktioniert das vierte Beispiel, obwohl die doppelten Anführungszeichen innerhalb einfacher stehen und lediglich den Leerraum einschließen?

  • #2
    Willkommen im Board,
    schön das du dich weiterbildest *g*.

    3. Beispiel: Wie du gelernt hast, wird in einfachen Anführungszeichen alles so ausgegeben, wie du es schreibst, eingeschlossen ", also Doppelte Anführungszeichen

    4. Beispiel: du kannst nacht dem "Verkettungsoperator" natürlich auch andere Zeichen anfügen, beispielsweise auch Variablen, also warum nicht andere Anführungszeichen um einen String zu beginnen/anzuketten.


    Klar, der Verkettungsoperator gehört dazu, den wirst du immer mal wieder brauchen, z.b. wenn du Arrays mit Schleifen durchläufst und alles in eine Variable schreiben möchtest.

    muss nu ins bett, vllt. hilft das schonmal

    Kommentar


    • #3
      Programm-Quellcode (nicht nur in PHP) besteht aus sogenannten Ausdrücken. Das sind einfache Statements (Funktionsaufrufe, Kontrollstrukturen, Variablenzuweisungen) oder komplexe Codestücke (zusammengesetzte Ausdrücke).

      Alles jetzt zu erklären führt zu weit, aber eine kleine Herleitung zum obigen Beispiel.

      1.
      $x
      eine Variable

      2.
      $x = 5;
      ein Ausdruck: einer Variable wird ein Wert zugewiesen. Der Wert ist numerischen Typs.

      3.
      $x = 'foo';
      ein Ausdruck: einer Variable wird ein Wert zugewiesen. Der Wert ist vom String-Typ und enthält die Zeichenklette „foo“.

      Exkurs

      Sowohl
      $x;
      'foo';
      5;
      sind für sich betrachtet auch Ausdrücke. Optisch passiert hier nichts, programmseitig werden sie aber verarbeitet.

      4.
      $x = 5;
      $y = 7;
      $z = $x+$y;
      mehrere Ausdrücke. Zuletzt eine Zuweisung, wobei das Ergebnis der Operation x+y zugewiesen wird.

      5.
      $x = 5;
      $y = "foo $x";
      spezielles PHP-Verhalten. Bei der Zuweisung wird der Ausdruck "foo $x" geparst und darin enthaltene Variablen ersetzt. Mit einfachen Hochkommata funktioniert dies nicht.

      6.
      $x = "Hallo";
      $y = "Ballo";
      $z = $x . $y;
      Operation ähnlich wie in 4. Hier aber für Stringtypen. Der Punkt stellt eine Verkettung dar.

      Das selbe Beispiel ohne Variablen:

      7.
      $z = "Hallo" . "Ballo";

      Das selbe Prinzip in Kombination:

      8.
      $x = "Ballo";
      $z = "Hallo " . $x . " Knallo";

      Das selbe Prinzip mit der Info aus 5:

      9.

      $x = "Ballo";
      $z = "Hallo $x" . " Knallo";

      usw.
      Wichtig ist, die einzelnen Teilausdrücke zu erkennen. Strings sind immer in sich geschlossen, vom führenden bis zum abschließenden Hochkomma. Diese müssen identisch sein. gleichartige Hochkommata innerhalb dieses Strings sind unzulässig:

      $x = "Hallo "Mc" Ballo"; // ungültig

      ... es sei denn, sie werden escaped:

      $x = "Hallo \"Mc\" Ballo"; // gültig

      Näheres dazu im Handbuch unter String Datentypen.
      [COLOR="#F5F5FF"]--[/COLOR]
      [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
      „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
      [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
      [COLOR="#F5F5FF"]
      --[/COLOR]

      Kommentar


      • #4
        Zitat von Tronjer Beitrag anzeigen
        PHP-Code:
          // Fünftes Beispiel - funktioniert nicht
          
        echo "Herzlich willkommen " .$vorname' ' .$name." zum PHP-Kurs";
        ?> 
        warum das nicht funktionieren soll ist mir schleierhaft, das ist korrektes PHP und bei mir funktioniert das auch so.

        Kommentar


        • #5
          Da haste dia fatippt:
          PHP-Code:
          // Viertes Beispiel - funktioniert nicht
            
          echo "Herzlich willkommen" ".$vorname." ".$name." "zum PHP-Kurs"
          Nach Herzlich willkommen ist ein " zu viel und nach $name ebenso. Richtig ist:
          PHP-Code:
          // Viertes Beispiel - funktioniert jetzt
            
          echo "Herzlich willkommen" .$vorname." ".$name." zum PHP-Kurs"
          Wenn du im Code mehr Leerzeichen machst, dann kann man das besser lesen:
          PHP-Code:
          // Viertes Beispiel - funktioniert jetzt
            
          echo "Herzlich willkommen " $vorname " " $name " zum PHP-Kurs"
          Dein letztes Beispiel funktioniert so wie es da steht. Wenn du das über einfache und doppelte Hochkommas gelernte aber konsequent anwendest, dann machst du die festen Texte in einfache Hochkommas. Dann sucht PHP da nicht da Ausdrücken, die zu parsen sind.
          [PHP]if ($var != 0) {
          $var = 0;
          }[/PHP]

          Kommentar


          • #6
            Danke für die Ausführungen und es ist mir auch - so denke ich mal - weitestgehend verständlich. Bei Textstrings macht es für die Ausgabe auf dem Bildschirm keinen Unterschied, ob man Hochkommata oder Anführungszeichen verwendet, während Anführungszeichen allerdings zwingend notwendig sind, sofern man den Wert einer Variablen ausgelesen bekommen möchte.

            Trotzdem hader ich immer noch mit folgendem Beispiel:
            PHP-Code:
            echo 'TextstringA '.$variable1." ".$variable2.' TextstringB'
            Wenn ich das nun in die einzelnen Bestandteile zerlege, dann wäre die Logik folgende:
            PHP-Code:
            /*Steht in Hochkommata, gefolgt von einem Leerzeichen,
            um den Wortabstand zur nachfolgenden Variablen herzustellen.*/
             
            'TextstringA '

            /*Beide Variablen werden mit einem Verknüpfungsoperator ein- und ausgeleitet.
            Anführungszeichen sollen den Wortabstand herstellen*/
            .$variable1." ".$variable2.

            /*Hochkommata und Leerzeichen, um den Abstand zur
            vorangegangenen Variable herzustellen.*/
            ' TextstringB' 
            Verhält es sich so, dass wenn ich Textstrings und Variablen miteinander verknüpfe und erstere in Hochkommata setze, die Anführungszeichen (" ") zwischen den Variablen lediglich zur Erzwingung des Wortabstandes dienen, oder mache ich hier einen Denkfehler?

            Warum schreibt man das Ganze dann nicht wie folgt? Das wäre kürzer und führt zur selben Ausgabe:
            PHP-Code:
            echo "TextstringA $variable1 $variable2 TextstringB"

            Kommentar


            • #7
              Absolut korrekt. Und die Frage am Ende kann man ebenso stehen lassen, es gibt keinen konkreten Grund, die eine oder andere Variante vorzuziehen.
              "Kürzer", "Besser lesbar", "Sinnvoller" sind alles persönliche Ansichten... richtig ist beides (d.h. im Ergebnis wird bei beiden das gleiche rauskommen)
              Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

              Kommentar


              • #8
                Nur um es noch mal deutlich zu sagen:
                Verhält es sich so, dass wenn ich Textstrings und Variablen miteinander verknüpfe und erstere in Hochkommata setze, die Anführungszeichen (" ") zwischen den Variablen lediglich zur Erzwingung des Wortabstandes dienen, oder mache ich hier einen Denkfehler?
                Für den vorliegenden Fall ja,
                aber: Grundlegend definieren die Hochkommata die Zeichenkette, die der String umfasst. Der Typ der Hochkommata definiert das Parsingverhalten (für Variablen als auch andere Elemente wie Escapezeichenketten - \n etc.).
                [COLOR="#F5F5FF"]--[/COLOR]
                [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
                „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
                [COLOR="#F5F5FF"]
                --[/COLOR]

                Kommentar


                • #9
                  Zitat von Tronjer Beitrag anzeigen
                  Warum schreibt man das Ganze dann nicht wie folgt?
                  Gewöhn dich schon einmal daran das es beim Programmieren meist mehr als eine "mögliche" Lösung gibt.

                  Bei so einfachen Dingen wie Strings ist es wie istegelitz shcon sagte egal und hängt von der persönlichen Präferenz ab.

                  Bei komplexeren Strukturen mit Arrays und Objekten wirst du aber feststellen das es zwar mehrere Möglichkeiten gibt, diese aber unterschiedliche Vor- und Nachteile haben und das die häufig zu sehende Prämisse "hauptsache es funktioniert" nicht immer zielführend ist.
                  "Alles im Universum funktioniert, wenn du nur weißt wie du es anwenden musst".

                  Kommentar


                  • #10
                    Zitat von lstegelitz Beitrag anzeigen
                    Absolut korrekt. Und die Frage am Ende kann man ebenso stehen lassen, es gibt keinen konkreten Grund, die eine oder andere Variante vorzuziehen.
                    "Kürzer", "Besser lesbar", "Sinnvoller" sind alles persönliche Ansichten... richtig ist beides (d.h. im Ergebnis wird bei beiden das gleiche rauskommen)
                    um mal zwei unterschiedlich Begründungen aufzuführen
                    PHP-Code:
                    "this is a $string
                    sehr kompakt, man sieht, daß ein String am Ende rauskommt. (ohne entsprechendes Syntaxhighlighting kann man aber die Variable leicht übersehen)
                    PHP-Code:
                    "this is a " $string 
                    man sieht sofort, daß da eine (und vor allem welche) Variable zu dem String beiträgt (enthält aber zusätzlich Operatoren)

                    Kommentar


                    • #11
                      Ja, wie ich schrieb:
                      "Kürzer", "Besser lesbar", "Sinnvoller" sind alles persönliche Ansichten...
                      ICH sehe auch in deinem ersten Beispiel sofort, das im String eine Variable enthalten ist...
                      Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                      Kommentar


                      • #12
                        PHP-Code:
                        echo "Manchmal gibt es auch lange Ausgaben, bei denen man eben nicht sofort überreißt, dass da mittendrin eine Variable $steht, weshalb man prinzipiell dazu raten kann, die festen Texte in einfache Hochkommas zu setzen und die Variable dazwischenzuketten. Dann versteht man seinen Kram, den man vor $drei Wochen geschrieben hat auch noch Jahre später."
                        PHP-Code:
                        echo 'Manchmal gibt es auch lange Ausgaben, bei denen man eben nicht sofort überreißt, dass da mittendrin eine Variable ' $steht ', weshalb man prinzipiell dazu raten kann, die festen Texte in einfache Hochkommas zu setzen und die Variable dazwischenzuketten. Dann versteht man seinen Kram, den man vor ' $drei ' Wochen geschrieben hat auch noch Jahre später.'
                        [PHP]if ($var != 0) {
                        $var = 0;
                        }[/PHP]

                        Kommentar


                        • #13
                          Ich schätze, Istegelitz spielt auf seine IDE an, mit gutem Syntax-Highlighting sieht das nämlich nicht so aus wie hier im Forum. Also wieder alles eine Frage der Perspektive
                          [IMG]https://g.twimg.com/twitter-bird-16x16.png[/IMG][URL="https://twitter.com/fschmengler"]@fschmengler[/URL] - [IMG]https://i.stack.imgur.com/qh235.png[/IMG][URL="https://stackoverflow.com/users/664108/fschmengler"]@fschmengler[/URL] - [IMG]http://i.imgur.com/ZEqflLv.png[/IMG] [URL="https://github.com/schmengler/"]@schmengler[/URL]
                          [URL="http://www.schmengler-se.de/"]PHP Blog[/URL] - [URL="http://www.schmengler-se.de/magento-entwicklung/"]Magento Entwicklung[/URL] - [URL="http://www.css3d.net/"]CSS Ribbon Generator[/URL]

                          Kommentar


                          • #14
                            Vielen Dank allen für die Beteiligung, damit wären die Fragen erschöpfend beantwortet.

                            Kommentar

                            Lädt...
                            X