1. Lieber Benutzer,

    Du musst bei uns registriert sein, um an den Diskussionen teilzunehmen. Melde dich jetzt an - kostenfrei und unverbindlich. Und stelle Deine eigenen Fragen oder gib uns hilfreiche Antworten

Verkettungsoperator

Dieses Thema im Forum "PHP" wurde erstellt von J@nnik, 16 April 2009.

  1. J@nnik

    J@nnik Neues Mitglied

    Registriert seit:
    6 April 2009
    Beiträge:
    36
    Punkte für Erfolge:
    0
    Ich bin (jetzt nach HTML und CSS) mal dabei, nen bisschen PHP zu lernen. Nur verstehe ich diesen Verkettungsoperatur nicht. Hier mal die Seite, von der ich's lerne: Verkettungsoperator

    Dort ist geschrieben:

    echo "Herzlich Willkommen zum" . $kursname . $präfix;

    Warum geht nicht einfach:

    echo "Herzlich Willkommen zum $kursname$präfix";
     
    Werbung: Jetzt registrieren, damit diese Werbung verschwindet
  2. Joda1994

    Joda1994 Neues Mitglied

    Registriert seit:
    25 November 2007
    Beiträge:
    163
    Punkte für Erfolge:
    0
    gaanz einfach... wenn du echo:"mein text $meineVar" benutzt, denkt php, dass du nicht den wert von $meineVar ausgeben möchtest, sondern $meineVar als wort selbst. ich glaub, php würde dass im zweifelsfall auch erkennen, aber es ist einfach sauberer und logischer, wenn du es mit ". schreibst und dann weiß auch jeder, dass du den wert von $meineVar haben willst.
     
  3. Efchen

    Efchen Guest

    Wer sagt denn, dass das nicht geht (außer Joda1994, und er hat Unrecht).

    echo "Herzlich Willkommen zum $kursname$präfix"; funktioniert auch.

    Das liegt an den verwendeten Anführungszeichen. Variablen innerhalb von Anfürhungszeichen werden aufgelöst. Verwendest Du stattdessen Single Quotes, werden sie nicht aufgelöst und werden als Text ausgegeben.

    echo 'Herzlich Willkommen zum $kursname$präfix';

    gibt also aus: Herzlich Willkommen zum $kursname$präfix
     
  4. Joda1994

    Joda1994 Neues Mitglied

    Registriert seit:
    25 November 2007
    Beiträge:
    163
    Punkte für Erfolge:
    0
    ...
    wo hab ich denn geschrieben, dass das nicht geht? meine meinung war, dass php es zwar auch erkennen würde, es aber die schlechtere schreibweise sei.
     
  5. Efchen

    Efchen Guest

    Naja, und es ist einfach eine Falschaussage.

    Die Frage war "Warum geht das nicht auch?" und Deine Antwort beginnt mit "ganz einfach" (was impliziert: "Das geht deshalb nicht, weil) und dann versuchst Du uns zu erklären, dass PHP "denkt". :) Und das, was Du da geschrieben hast, stimmt schlichtweg nicht, weil die zweite Schreibweise eben auch funktioniert und richtig ist und in keiner Weise schlechter ist.

    Die Erklärung hab ich ja gegeben, was geht und was nicht und was Du vielleicht meintest, aber nicht richtig ausgedrückt hast, aber jeder Anfänger missverstanden hätte.
     
  6. J@nnik

    J@nnik Neues Mitglied

    Registriert seit:
    6 April 2009
    Beiträge:
    36
    Punkte für Erfolge:
    0
    Wenn man diesen Verkettungsoperator nutzt, ist dann möglich Leerzeichen zu machen?

    Also wenn ich eingebe:

    echo "Ich heiße $name $nachname";

    dann kommt

    Ich heiße Max Musterman

    Wenn ich aber eingebe:

    echo "Ich heiße" . $name . $nachname;

    dann kommt

    Ich heißeMaxMustermann
     
  7. Asipak4You

    Asipak4You Neues Mitglied

    Registriert seit:
    19 Juli 2005
    Beiträge:
    577
    Punkte für Erfolge:
    0
    PHP:
    1. echo 'Ich heiße ' . $name . ' ' . $nachname;
     
  8. J@nnik

    J@nnik Neues Mitglied

    Registriert seit:
    6 April 2009
    Beiträge:
    36
    Punkte für Erfolge:
    0
    Ah, da hätte ich ja auch selbst drauf kommen müssen...naja...danke auf jeden Fall!
     
  9. J@nnik

    J@nnik Neues Mitglied

    Registriert seit:
    6 April 2009
    Beiträge:
    36
    Punkte für Erfolge:
    0
    Bin jetzt etwas weiter beim Affenformular, aber komme jetzt irgendwie nicht weiter (wollte dazu jetzt nicht extra nen neuen Thread eröffnen, nehme also einfach den hier):

    Bei der Aufgabe auf der Seite, mit der ich PHP lerne (PHP-Kurs | Willkommen), sollte man ein Eingabe-Feld erstellen, bei dem man einen Namen eingeben kann. Wenn man keinen Namen eingibt, soll eine Fehlermeldung erscheinen, dass man das Feld leer gelassen hat und wenn man einen Namen eingibt, soll erscheinen "Eingetragener Name: >>Name<<"

    Das ganze soll über ein hidden-Feld möglich sein, wie das funktioniert versteh ich aber noch nicht. Bei so einem hidden-Feld kann man doch garnichts eingeben. Wie soll da irgendwas überprüft werden. Wenn ich das Sript jetzt richtig verstanden habe, wird überprüft ob sowohl das hidden-Feld, als auch das Feld zur Namens-Eingabe leer sind. Also jetzt hier mal das, was ich geschrieben habe:

    PHP:
    1. <?php
    2. if (empty ($_GET['name']) == TRUE)
    3. {
    4.     if ( $_GET['kontrolle'] == TRUE )
    5.     {
    6.         echo "<p><b>Bitte geben sie einen Namen ein!</b>";
    7.     }
    8.     echo '    
    9.    <form action="1.php" method="GET" />
    10.    
    11.    <p>Ihr Vorname:
    12.    <input type="text" name="vorname" />
    13.    </p>
    14.    
    15.    <input type="hidden" name="kontrolle" value="1" />
    16.    
    17.    <p>Absende-Buttom:
    18.    <input type="submit" name="buttom" value="absenden" />
    19.    </p>
    20.    
    21.    </form>';
    22. }
    23. else
    24. {
    25.   echo "Eingetragener Name: " . $_GET['kontrolle'];
    26. }    
    27. ?>
    Und der Lösungvorschlag ist der auf diesem Bild: http://www.php-kurs.com/bilder/58-affenformular-kontrolle-code.png . Bis auf ein paar Kleinigkeiten erkenne ich da jetzt keinen Unterschied zwischen meiner Lösung und dem Lösungsvorschlag, also eigentlich sollte es doch richtig funtkionierten.
     
  10. Asipak4You

    Asipak4You Neues Mitglied

    Registriert seit:
    19 Juli 2005
    Beiträge:
    577
    Punkte für Erfolge:
    0
    Warum auf ein hidden-Feld testen? Den Inhalt des Feldes könntest du zur Laufzeit nur mti Javascript ändern, was keinen Sinn macht. User mit deaktiviertem Javascript könnten das Formular nicht abschicken.

    PHP:
    1. <?php
    2. $err_msg = '';
    3. if ($_SERVER["REQUEST_METHOD"] == 'GET') {
    4.   if (isset($_GET["vorname"]) && trim($_GET["vorname") != '') {
    5.     //alles ok
    6.   } else {
    7.     $err_msg = 'Bitte Vornamen eingeben!';
    8.   }
    9. }
    10.  
    11. //Ausgabe der Fehlermeldung sofern gesetzt
    12. if ($err_msg != '') {
    13.   echo '<p>' . $err_msg . '</p>';
    14. }
    Du testest übrigens auf $_GET["name"] obwohl dieser Wert in keinem name="" - Attribut steht. Du musst auf $_GET["vorname"] testen.
     
  11. J@nnik

    J@nnik Neues Mitglied

    Registriert seit:
    6 April 2009
    Beiträge:
    36
    Punkte für Erfolge:
    0
    Das ist die Aufgabe auf der Seite, um PHP zu lernen.

    "Inhalt des Feldes zur Laufzeit"? Hä?

    Ah, stimmt. Das war der Fehler. Jetztz funktionierts. Also

    PHP:
    1. <?php
    2. if (empty ($_GET['vorname']) == TRUE)
    3. {
    4.     if ( $_GET['kontrolle'] == TRUE )
    5.     {
    6.         echo "<p><b>Bitte geben sie einen Namen ein!</b>";
    7.     }
    8.     echo '    
    9.    <form action="1.php" method="GET" />
    10.    
    11.    <p>Ihr Vorname:
    12.    <input type="text" name="vorname" />
    13.    </p>
    14.    
    15.    <input type="hidden" name="kontrolle" value="1" />
    16.    
    17.    <p>Absende-Buttom:
    18.    <input type="submit" name="buttom" value="absenden" />
    19.    </p>
    20.    
    21.    </form>';
    22. }
    23. else
    24. {
    25.   echo "Eingetragener Name: " . $_GET['vorname'];
    26. }    
    27. ?>
     
  12. CGollhardt

    CGollhardt Mitglied

    Registriert seit:
    13 November 2005
    Beiträge:
    621
    Punkte für Erfolge:
    18
    Die Aussage meines Vorposters ist absolut korrekt, jedoch möchte ich noch eine Kleinigkeit hinzufügen:

    Strings sollen generel in Singelquotes (') ausgedrück werden, und niemals in Anführungszeichen ("), da dies mehr Speicher frisst.

    Wie Efchen bereits erwähnt hat, werden in (") die Variablen aufgelöst, und somit wird php einen (") String immer erst parsen. Mit (') wird der String sofort ausgegeben. Für die Performance mag dies bei kleineren Projekten nicht wirklich viel ausmachen, jedoch sollte man immer
    PHP:
    1. echo 'Aktuelle Preis: ' . $preis . ' &euro;';
    schreiben und nicht
    PHP:
    1. echo "Aktuelle Preis: $preis &euro";
    Sorry dass ich jetzt nochmal den Thread so durcheinander würfel, aber ich denke das ist noch enorm wichtig, zu wissen.
     
  13. Asipak4You

    Asipak4You Neues Mitglied

    Registriert seit:
    19 Juli 2005
    Beiträge:
    577
    Punkte für Erfolge:
    0
    Bei den paar Zeilen die man mit echo ausgibt dürfte das nicht arg ins Gewicht fallen, denke ich. Größere Blöcke wie Formulare oder Tabellen sollte man sich sowieso lieber außerhalb vom PHP-Code ausgeben lassen.

    PHP:
    1. <?php
    2. //...php-code
    3. ?>
    4. <table>
    5. <tr>
    6. <td>
    7.  
    8. </td>
    9. </tr>
    10. </table>
    11. <?php
    12. //..php
    13. ?>
    14.  
    Man sollte sich lieber über Softwaredesign oder eine Cache-Funktion gedanken machen, sollte die Performance eine große Rolle spielen.

    Hier noch ein interessanter Beitrag zur Performance von double bzw. single quotes.

    PHP Performance von Single- oder Doublequotes, Part 2 - bueltge.de [by:ltge.de]
     
  14. CGollhardt

    CGollhardt Mitglied

    Registriert seit:
    13 November 2005
    Beiträge:
    621
    Punkte für Erfolge:
    18
    lol was für ein Wiedersupruch
     
  15. Asipak4You

    Asipak4You Neues Mitglied

    Registriert seit:
    19 Juli 2005
    Beiträge:
    577
    Punkte für Erfolge:
    0
    Du hast die Beiträge nicht richtig gelesen.

    Der erste Test berief sich nur auf die Performance bei der Ausgabe innerhalb einer Schleife.
     
  16. CGollhardt

    CGollhardt Mitglied

    Registriert seit:
    13 November 2005
    Beiträge:
    621
    Punkte für Erfolge:
    18
    Oh sorry stimmt.
     

Diese Seite empfehlen