• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Verkettungsoperator

J@nnik

Neues Mitglied
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:
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.
 
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
 
Werbung:
...
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.
 
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.
 
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
 
Werbung:
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:
<?php
if (empty ($_GET['name']) == TRUE)
{
    if ( $_GET['kontrolle'] == TRUE )
    {
        echo "<p><b>Bitte geben sie einen Namen ein!</b>";
    }
    echo '    
    <form action="1.php" method="GET" />
    
    <p>Ihr Vorname: 
    <input type="text" name="vorname" />
    </p>
    
    <input type="hidden" name="kontrolle" value="1" />
    
    <p>Absende-Buttom: 
    <input type="submit" name="buttom" value="absenden" />
    </p>
    
    </form>';
}
else
{
  echo "Eingetragener Name: " . $_GET['kontrolle'];
}    
?>

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.
 
Werbung:
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:
<?php
$err_msg = '';
if ($_SERVER["REQUEST_METHOD"] == 'GET') {
  if (isset($_GET["vorname"]) && trim($_GET["vorname") != '') {
    //alles ok
  } else {
    $err_msg = 'Bitte Vornamen eingeben!';
  }
}

//Ausgabe der Fehlermeldung sofern gesetzt
if ($err_msg != '') {
  echo '<p>' . $err_msg . '</p>';
}

Du testest übrigens auf $_GET["name"] obwohl dieser Wert in keinem name="" - Attribut steht. Du musst auf $_GET["vorname"] testen.
 
Warum auf ein hidden-Feld testen?

Das ist die Aufgabe auf der Seite, um PHP zu lernen.

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.

"Inhalt des Feldes zur Laufzeit"? Hä?

Du testest übrigens auf $_GET["name"] obwohl dieser Wert in keinem name="" - Attribut steht. Du musst auf $_GET["vorname"] testen.

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

PHP:
<?php
if (empty ($_GET['vorname']) == TRUE)
{
    if ( $_GET['kontrolle'] == TRUE )
    {
        echo "<p><b>Bitte geben sie einen Namen ein!</b>";
    }
    echo '    
    <form action="1.php" method="GET" />
    
    <p>Ihr Vorname: 
    <input type="text" name="vorname" />
    </p>
    
    <input type="hidden" name="kontrolle" value="1" />
    
    <p>Absende-Buttom: 
    <input type="submit" name="buttom" value="absenden" />
    </p>
    
    </form>';
}
else
{
  echo "Eingetragener Name: " . $_GET['vorname'];
}    
?>
 
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

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:
echo 'Aktuelle Preis: ' . $preis . ' &euro;';
schreiben und nicht
PHP:
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.
 
Werbung:
Sorry dass ich jetzt nochmal den Thread so durcheinander würfel, aber ich denke das ist noch enorm wichtig, zu wissen.

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:
<?php
//...php-code
?>
<table>
<tr>
<td>
 
</td>
</tr>
</table>
<?php
//..php
?>

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]
 

lol was für ein Wiedersupruch
Denn die Analyse des Blog PHP-Performance, der sich ausgiebig und übersichtlich mit Performance im Bereich PHP beschäftigt, ergab eine neue Erkenntniss: PHP- Ausgaben mit Doublequotes sind schneller.
eshalb und vor allem durch das Blog von Christian erinnert, habe ich die Datei in meinen Experimente-Ordner geladen und jeder Interessierte kann sich davon überzeugen, dass Singelquotes schneller sind. Das Parsen fällt nun mal weg.
 
Du hast die Beiträge nicht richtig gelesen.

Entscheidenter Unterschied: die Schleifendauer ist höher. Wenn die Schleifenwerte zu klein sind, dann spielt das System eine größere Rolle als die Arbeit des Parsers. Mit einem großen Schleifenwert bekommt man also wahre Werte im Bezug auf das Parsen der Quotes.

Der erste Test berief sich nur auf die Performance bei der Ausgabe innerhalb einer Schleife.
 
Werbung:
Zurück
Oben