Ein String ist eine Folge von Zeichen. In PHP entspricht
ein Zeichen einem Byte, das heißt, dass exakt 256 verschiedene Zeichen
möglich sind. Das impliziert auch, dass PHP keine native Unterstützung
für Unicode bietet.
Anmerkung:
Für einen String stellt die Länge kein Problem dar. Von PHP-Seite aus
gibt es keine praktische Grenze für die Größe eines Strings. Daher gibt
es keinen Grund sich Sorgen über lange Strings zu machen.
Der leichteste Weg einen einfachen String zu schreiben, ist der
Einschluss in einfache Anführungszeichen
(das Zeichen ').
Um ein einfaches Anführungszeichen wörtlich auszugeben, muss dieses
mit einem Backslash (\) escaped werden, wie in
vielen anderen Programmiersprachen auch. Wenn Sie innerhalb eines
Strings einen Backslash vor einem einfachen Anführungszeichen oder am
Ende eines Strings ausgeben wollen, müssen Sie diesen verdoppeln.
Beachten Sie: wenn Sie versuchen irgendwelche anderen Zeichen zu
escapen, wird der Backslash ebenfalls ausgegeben! Daher besteht für
gewöhnlich keine Notwendigkeit den Backslash selbst zu escapen.
Anmerkung:
In PHP 3 wird eine Warnung auf der Stufe E_NOTICE
ausgegeben, wenn das passiert.
Anmerkung:
Anders als bei den zwei anderen Schreibweisen werden Variablen
innerhalb von single-quoted Strings
nicht ausgewertet.
echo 'Das ist ein einfacher String';
echo 'Sie können ebenso einen Zeilenumbruch einfügen,
auf diese Art.';
echo 'Arnold sagte einmal: "I\'ll be back"';
// Ausgabe: ... "I'll be back"
echo 'Sind Sie sicher, dass Sie C:\\*.* löschen wollen?';
// Ausgabe: ... dass Sie C:\*.* löschen wollen?
echo 'Sind Sie sicher, dass Sie C:\*.* löschen wollen?';
// Ausgabe: ... dass Sie C:\*.* löschen wollen?
echo 'Ich versuche einen Zeilenumbruch an diesem Punkt: \n ein Zeilenumbruch';
// Ausgabe: ... diesem Punkt: \n ein Zeilenumbruch'
$var = "nur zum Vergnügen";
echo 'Das mache ich $var';
// Ausgabe: Das mache ich $var
Eine andere Möglichkeit Strings einzufassen, besteht im Gebrauch
der heredoc-Syntax ("<<<"). Hierfür ist nach
<<< ein Bezeichner zu setzen. Nun folgt
der eigentliche String und dann derselbe Bezeichner um den String
abzuschließen.
Der schließende Bezeichner muss
in der ersten Spalte der Zeile stehen. Die verwendeten Bezeichner
müssen den gleichen Regeln entsprechen wie alle anderen PHP-Labels auch:
Sie dürfen lediglich alphanumerische Zeichen und den Unterstrich enthalten
und müssen mit einem Unterstrich oder einem Buchstaben beginnen.
Warnung
Es ist sehr wichtig zu beachten, dass die Zeile mit dem schließenden
Bezeichner keine anderen Zeichen enthält, ausgenommen
möglicherweise ein Semikolon
(;).
Das bedeuted im Besonderen, dass der Bezeichner
nicht eingerückt werden darf und es dürfen
keine Leerzeichen oder Tabulatoren vor oder nach dem Semikolon stehen.
Wahrscheinlich der unangenehmste Umstand ist der, dass ebenso kein
Wagenrücklauf (\r) am Ende dieser Zeile stehen darf,
nur ein Zeilenvorschub (\n).
Da Microsoft Windows die Folge \r\n als
Zeilenabschlusszeichen benutzt, kann Ihre heredoc-Syntax nicht
funktionieren, wenn Sie Ihr Skript mit einem Editor unter Windows
schreiben. Die meisten Programmier-Editoren bieten jedoch die
Möglichkeit, Ihre Dateien mit einem UNIX Zeilenende zu speichern.
Heredoc-Text funktioniert wie ein String innnerhalb doppelter
Anführungszeichen, nur ohne doppelte Anführungszeichen.
Anführungszeichen innerhalb von heredoc-Texten müssen
also keiner Sonderbehandlung (escapen) unterzogen werden, aber Sie
können dennoch die oben aufgeführten Escape-Anweisungen verwenden.
Variablen werden ausgewertet, aber besondere Aufmerksamkeit muss komplexen
Variablen gewidmet werden, genau wie bei Strings.
Beispiel 6-2.
Beispiel zur String-Festlegung per "heredoc"-Methode:
<?php
$str = <<<EOD
Beispiel eines Strings
über mehrere Script-Zeilen
durch Gebrauch der heredoc-Syntax.
EOD;
/* komplexeres Beispiel, mit Variablen */
class foo {
var $foo;
var $bar;
function foo() {
$this->foo = 'Foo';
$this->bar = array('Bar1', 'Bar2', 'Bar3');
}
}
$foo = new foo();
$name = 'Mein Name';
echo <<<EOT
Mein Name ist "$name". Ich schreibe einige $foo->foo.
Nun schreibe ich gerade einige {$foo->bar[1]}.
Dies sollte ein großes 'A' schreiben: \x41
EOT;
?>
Anmerkung:
Die heredoc Unterstützung wurde in PHP 4 eingeführt.
Wird ein String in doppelten Anführungszeichen oder mit heredoc angegeben,
werden enthaltene Variablen ausgewertet (geparst).
Es gibt zwei Syntax-Typen, eine
einfache
und eine
komplexe.
Die einfache Syntax ist die geläufigste und bequemste. Sie bietet die
Möglichkeit eine Variable, einen Array-Wert oder eine Objekt-Eigenschaft
auszuwerten (parsen).
Die komplexe Syntax wurde in PHP 4 eingeführt und ist an den
geschweiften Klammern {}erkennbar, die
den Ausdruck umschließen.
Sobald ein Dollarzeichen ($) auftaucht, wird
der Parser versuchen, gierig so viele Zeichen wie möglich zu bekommen,
um einen gültigen Variablennamen zu bilden. Schließen Sie Ihren
Varaiblennamen in geschweifte Klammern ein, wenn Sie ausdrücklich das
Ende des Namens angeben wollen.
$beer = 'Heineken';
echo "$beer's Geschmack ist großartig"; // funktioniert, "'" ist kein gültiges
// Zeichen für einen Variablennamen
echo "Er hat einige $beers getrunken"; // funktioniert nicht, 's' ist ein gültiges
// Zeichen für einen Variablennamen
echo "Er hat einige ${beer}s getrunken"; // funktioniert
Auf ähnliche Weise können Sie erreichen, dass ein Array-Index
oder eine Objekt-Eigenschaft ausgewertet wird. Bei Array-Indizes
markiert die schließende eckige Klammer (]) das
Ende des Index. Für Objekt-Eigenschaften gelten die gleichen Regeln
wie bei einfachen Variablen, obwohl es bei Objekt-Eigenschaften keinen
Trick gibt, wie dies bei Variablen der Fall ist.
$früchte = array( 'Erdbeere' => 'rot' , 'Banane' => 'gelb' );
// Beachten Sie: außerhalb von String-Anführungszeichen funktioniert das anders.
echo "Eine Banane ist $früchte[Banane].";
echo "Dieses Quadrat ist $quadrat->breite Meter breit.";
// Funktioniert nicht. Für eine Lösung siehe die komplexe Syntax.
echo "Dieses Quadrat ist $quadrat->breite00 Zentimeter breit.";
Für irgendetwas Komplexeres sollten Sie die komplexe Syntax nutzen.
Diese wird nicht komplex genannt, weil etwa die Syntax komplex ist,
sondern weil Sie auf diesem Weg komplexe Ausdrücke einbeziehen können.
Tatsächlich können Sie jeden beliebigen Wert einbeziehen, der im
Namensbereich in Strings gültig ist. Schreiben Sie den Ausdruck einfach
auf die gleiche Art und Weise, wie außerhalb des Strings, und
umschließen diesen mit { und }. Da Sie '{' nicht escapen können, wird
diese Syntax nur erkannt, wenn auf { unmittelbar $ folgt.
(Benutzen Sie "{\$" oder "\{$" um ein wörtliches "{$" zu erhalten.)
Einige Beispiele, um dies zu verdeutlichen:
$great = 'fantastisch';
echo "Das ist { $great}"; // funktioniert nicht, Ausgabe: Das ist { fantastisch}
echo "Das ist {$great}"; // funktioniert, Ausgabe: Das ist fantastisch
echo "Dieses Quadrat ist {$square->width}00 Zentimeter breit.";
echo "Das funktioniert: {$arr[4][3]}";
// Das ist aus dem gleichen Grund falsch
// wie $foo[bar] außerhalb eines Strings falsch ist.
echo "Das ist falsch: {$arr[foo][3]}";
echo "So sollten Sie es machen: {$arr['foo'][3]}";
echo "Sie können sogar schreiben {$obj->values[3]->name}";
echo "Das ist der Wert der Variable mit Namen $name: {${$name}}";
Auf Zeichen innerhalb von Strings kann durch die Angabe des
nullbasierten Offsets in geschweiften Klammern nach dem String,
auf das gewünschte Zeichen zugegriffen werden.
Anmerkung:
Für Abwärtskompatibilität können Sie immer noch die Array-Klammern verwenden.
Diese Syntax wird jedoch seit PHP 4 missbilligt.
Beispiel 6-3. Einige String-Beispiele
<?php
// Zuweisung eines Strings.
$str = "Dies ist eine Zeichenkette";
// Erweiterung dieses Strings.
$str = $str . " mit etwas zusätzlichem Text";
// andere Möglichkeit zum Erweitern incl. Anweisung für Neue-Zeile.
$str .= " und einer neuen Zeile am Ende.\n";
/*
Nach diesen drei Operationen enthält $str:
"Dies ist eine Zeichenkette mit etwas zusätzlichem Text und einer neuen Zeile am Ende.\n."
*/
// Dieser String wird am Ende zu: '<p>Nummer: 9</p>'
$num = 9;
$str = "<p>Nummer: $num</p>";
// Dieser wird zu '<p>Nummer: $num</p>'
$num = 9;
$str = '<p>Nummer: $num</p>';
// Das erste Zeichen eines Strings.
$str = 'Das ist ein Test.'
$first = $str{0}; // $first enthält "D"
// Das letzte Zeichen eines Strings.
$str = 'Das ist immer noch ein Test.'
$last = $str{strlen($str)-1}; // $last enthält "."
?>
Zeichenketten / Strings können mittels des '.'(dot)-Operators
miteinander verbunden werden. Beachten Sie, dass
dafür nicht der '+' (Additions)-Operator verwendet werden kann
Für mehr Informationen schauen Sie bitte unter den
Zeichenketten-Operatoren
nach.
Es gibt eine Menge nützlicher Funktionen zur String-Manipulation.
Für allgemeine Funktionen schauen Sie sich den Abschnitt über
String Funktionen an,
und für fortgeschrittenes Suchen & Ersetzen die Funktionen zu
Regulären Ausdrücken (in zwei Ausführungen:
Perl Kompatibel und
POSIX erweitert).
Sobald ein String als numerischer Wert ausgewertet wird, wird der
resultierende Wert und Typ wie folgt festgelegt.
Der String wird als float ausgewertet, wenn er eines der
Zeichen '.', 'e' oder 'E' enthält. Ansonsten wird er als Integer-Wert
interpretiert.
Der Wert wird durch den Anfangsteil des Strings bestimmt.
Sofern der String mit gültigen numerischen Daten beginnt, werden diese
als Wert benutzt. Andernfalls wird der Wert 0 (Null)
sein. Gültige numerische Daten sind ein optionales Vorzeichen,
gefolgt von einer oder mehreren Zahlen (optional mit einem
Dezimalpunkt). Wahlweise kann auch ein Exponent angegeben
werden. Der Exponent besteht aus einem 'e' oder 'E', gefolgt von einer
oder mehreren Zahlen.
$foo = 1 + "10.5"; // $foo ist float (11.5)
$foo = 1 + "-1.3e3"; // $foo ist float (-1299)
$foo = 1 + "bob-1.3e3"; // $foo ist integer (1)
$foo = 1 + "bob3"; // $foo ist integer (1)
$foo = 1 + "10 Kleine Schweine"; // $foo ist integer (11)
$foo = 4 + "10.2 Ferkel"; // $foo ist float (14.2)
$foo = "10 Schweine " + 1; // $foo ist integer (11)
$foo = "10.0 Schweine " + 1; // $foo ist float (11)
$foo = "10.0 Schweine " + 1.0; // $foo ist float (11)
Weitere Informationen über solche Umwandlungen finden Sie in
den UNIX Manualseiten unter strtod(3).
Wenn Sie irgendein Beispiel dieses Abschnitts testen wollen, können Sie
dieses per "Copy und Paste" übernehmen. Fügen Sie die folgende Zeile
Ihrem Skript hinzu und Sie sehen selbst was passiert:
echo "\$foo==$foo; Typ ist " . gettype ($foo) . "<br />\n";