Einfache und doppelte PHP-Anführungszeichen. Unterschied zwischen doppelten und einfachen Anführungszeichen in PHP. Beispiel Nr. 3 Beispiel für eine Heredoc-String-Definition

Wie Sie im vorherigen Tutorial gesehen haben, ist der Echo-Befehl in PHP ein Mittel zur Textausgabe. Im Laufe Ihrer PHP-Karriere werden Sie den Echo-Befehl häufiger verwenden als jeden anderen. Schauen wir es uns also genau an!

Line-Ausgang

Um einen String auszugeben, wie wir es in den vorherigen Lektionen getan haben, wird echo verwendet. Mit seiner Hilfe können Sie Text in Anführungszeichen, Variablenwerten usw. anzeigen. Schauen wir uns ein Beispiel an.

Ich liebe es, PHP zu verwenden!"; ?>

Ausgabe der Phrase „Hallo!“ Wir sind bereits vertraut, hier gibt es nichts Neues. Aber der nächste Echo-Befehl enthält, wie Sie sehen können, ein HTML-Tag. Es ist nicht verboten, HTML-Tags zu verwenden, da PHP uns Dynamik verleiht und die Statik und das Seitendesign immer noch dem normalen HTML ausgeliefert sind.

Vorsicht, doppelte Anführungszeichen!

Es ist sehr cool, dass man HTML in PHP ausgeben kann. Allerdings sollten Sie vorsichtig sein, wenn Sie HTML-Code oder andere Zeichenfolgen verwenden, die Anführungszeichen enthalten! Echo verwendet Anführungszeichen, um den Anfang und das Ende einer Zeichenfolge zu definieren. Sie müssen daher eine der folgenden Optionen verwenden, wenn Sie Anführungszeichen innerhalb von Echo verwenden möchten:

  • Verwenden Sie keine Anführungszeichen innerhalb einer Zeichenfolge.
  • Setzen Sie interne Anführungszeichen mit einem Schrägstrich um. Um die Verarbeitung innerer Anführungszeichen zu vermeiden, setzen Sie einfach direkt davor einen Backslash, z. B. \".
  • Verwenden Sie innerhalb der Zeichenfolge einfache Anführungszeichen (Apostrophe).

Sehen Sie sich unser Beispiel unten für die korrekte und falsche Verwendung des Echo-Befehls an:

Ich liebe es, PHP zu verwenden!"; // OK, weil wir den Anführungszeichen entgangen sind! echo "

Ich liebe es, PHP zu verwenden!
"; // OK, weil wir ein Apostroph „echo“ verwendet haben
Ich liebe es, PHP zu verwenden!
"; ?>

Wenn Sie eine Zeichenfolge ausgeben möchten, die Anführungszeichen enthält, verwenden Sie entweder ein Apostroph (‘) oder maskieren Sie die Anführungszeichen, indem Sie einen Schrägstrich (\“) davor setzen. Der Backslash teilt PHP mit, dass das darauffolgende Zeichen nicht vom Interpreter analysiert werden soll!

Variable Ausgabe

Das Ableiten von Variablen ist sehr einfach. Tatsächlich müssen Sie nichts Besonderes tun, um Variablen in PHP anzuzeigen. Er kann es selbst tun. Hier ist ein Beispiel, das Ihnen hilft, alles zu verstehen:

Ergebnis:

Hallo Bob. Mein Name ist: 4a

Gleichzeitige Ausgabe von Variablen und Textzeichenfolgen

Sie können Variablen auch in doppelten Anführungszeichen ausgeben (z. B. „text text $variable“). Indem Sie eine Variable in Anführungszeichen ("") setzen, teilen Sie PHP mit, dass sie ihren Wert annehmen, in einen String-Typ konvertieren und ausgeben soll. Das folgende Beispiel zeigt, wie man diesen Trick richtig macht :)

"; echo „Hallo, ich bin Bob. Wer bist du? $my_string
"; echo „Hallo, ich bin Bob. Wer bist du? $my_string Bobetta"; ?>

Ergebnis:

Hallo Bob. Mein Name ist: Bobetta Hallo, ich bin Bob. Wer bist du? Hallo Bob. Mein Name ist: Hallo, ich bin Bob. Wer bist du? Hallo Bob. Mein Name ist: Bobetta

Das Platzieren von Variablen innerhalb einer Zeile kann Zeit sparen und die Lesbarkeit Ihres Codes verbessern, ist aber gewöhnungsbedürftig. Denken Sie daran, Anführungszeichen zu verwenden. Einfache Anführungszeichen geben keine Variablenwerte aus. Einfache Anführungszeichen geben den Variablennamen einfach in eine Zeichenfolge aus, d. h. $my_string, nicht „Hallo Bob. Ich heiße."

Echo ist kein Feature!

Echo ist keine Funktion, sondern ein Sprachkonstrukt. Bei der Verwendung von Funktionen in PHP haben diese eine ganz bestimmte Form, auf die wir uns später sicher noch eingehen werden. Seien Sie sich vorerst nur darüber im Klaren, dass Echo ein besonderes Werkzeug ist, das Sie mit Sicherheit lieben werden! :D

Verkettung von PHP-Strings

Die vielleicht häufigste Operation mit Strings ist deren Verkettung oder das Verbinden eines Strings mit einem anderen. Um Zeichenfolgen zu verketten, wurde ein spezieller Operator „.“ eingeführt. (Punkt).

Beispiel:


Am Ausgang erhalten wir die komplette Zeile: „Mein Heimatland ist weit!“

Werte vom Typ String sind Textstrings (kurz Strings). Eine Zeichenfolge ist eine Folge von null oder mehr Zeichen. Zu den Zeichen gehören Buchstaben, Zahlen, Satzzeichen, Sonderzeichen und Leerzeichen.

Eine Zeichenfolge kann auf vier verschiedene Arten definiert werden:

  • doppelte Anführungszeichen
  • einfache Anführungszeichen
  • Heredoc-Syntax
  • nowdoc-Syntax

Zeichenfolge in doppelten Anführungszeichen

Zeichenfolge in doppelten Anführungszeichen:

Sie können Escape-Sequenzen in Zeichenfolgen in doppelten Anführungszeichen verwenden. Kontrollsequenz– Hierbei handelt es sich um Sonderzeichen zur Formatierung der Textausgabe. Die folgenden Escape-Sequenzen sind in PHP verfügbar:

Die Haupteigenschaft von Zeichenfolgen in doppelten Anführungszeichen ist die Fähigkeit, Variablen innerhalb der Zeichenfolgen zu verarbeiten.


Dollarzeichen: \$";

In doppelte Anführungszeichen eingeschlossene Zeichenfolgen können einfache Anführungszeichen enthalten:

Echo "Einfaches Anführungszeichen: "";

Zeichenfolge in einfachen Anführungszeichen (Apostrophe)

Zeichenfolge in einfachen Anführungszeichen:

$str = "String"; echo „Eine große Zeile kann in mehrere kleine Zeilen unterteilt werden, um die Lesbarkeit zu erleichtern.“;

Im Gegensatz zu Zeichenfolgen in doppelten Anführungszeichen und der Heredoc-Syntax werden in einfache Anführungszeichen eingeschlossene Variablen und Steuersequenzen (mit einer Ausnahme) nicht verarbeitet. Dies bedeutet, dass sie als normale Zeichenfolgenzeichen interpretiert werden:

$num = 10; echo „Zahl: $num
Dollarzeichen: \$";

Um einfache Anführungszeichen in einer in einfache Anführungszeichen eingeschlossenen Zeichenfolge verwenden zu können, müssen Sie sie mit einem Backslash (\") maskieren. Wenn Sie den Backslash selbst schreiben müssen, müssen Sie ihn duplizieren (\\):

Echo „Verwenden Sie im Inneren „einfache“ Anführungszeichen“; echo "Backslash: \\";

In einfache Anführungszeichen eingeschlossene Zeichenfolgen können doppelte Anführungszeichen enthalten:

Echo „Doppeltes Anführungszeichen: „“;

Heredoc-Syntax

Die Heredoc-Syntax ist eine alternative Möglichkeit, Zeichenfolgen zu schreiben.

Eine mit der Heredoc-Syntax definierte Zeichenfolge funktioniert genauso wie eine in doppelte Anführungszeichen eingeschlossene Zeichenfolge. Der Unterschied zwischen Heredoc und einer Zeichenfolge in doppelten Anführungszeichen besteht darin, dass es bei Heredoc nicht erforderlich ist, die doppelten Anführungszeichen zu maskieren.

Die Heredoc-Syntax beginnt mit drei Zeichen<<< , после которых должен быть указан произвольный идентификатор (назовём его открывающим). Идентификатор может быть указан как в двойных кавычках, так и без них. Sofort Auf den Bezeichner darf ein Zeilenumbruch folgen. Nach dem Bezeichner dürfen keine anderen Zeichen als ein Zeilenumbruch stehen, da sonst ein Fehler auftritt. Als nächstes kommt der String-Inhalt selbst. Nach dem String-Inhalt muss in einer separaten Zeile ein abschließender Bezeichner angegeben werden (derselbe wie after<<<). Перед ним и после него не должно быть никаких пробелов или других символов, за исключением точки с запятой. Если это правило нарушено, то считается, что закрывающий идентификатор отсутствует и будет вызвана ошибка:

<<

Nowdoc-Syntax

Die Nowdoc-Syntax ist wie Heredoc eine alternative Möglichkeit, Zeichenfolgen zu schreiben.

Eine mithilfe der Nowdoc-Syntax definierte Zeichenfolge funktioniert genauso wie eine Zeichenfolge in einfachen Anführungszeichen. Der Unterschied zwischen Nowdoc und einer Zeichenfolge in einfachen Anführungszeichen besteht darin, dass bei Nowdoc keine Notwendigkeit besteht, einfache Anführungszeichen zu maskieren.

Die Syntax von Nowdoc ähnelt der von Heredoc, mit dem einzigen Unterschied, dass der Eröffnungsbezeichner in einfache Anführungszeichen gesetzt werden muss:

$num = 10; Echo<<<"some_id" Число: $num some_id;

Umgang mit Variablen in Strings

Für den Umgang mit Variablen in Strings gibt es zwei Arten von Syntax: einfach Und schwierig.

Einfache Syntax- In diesem Fall wird der Variablenname unverändert in der Zeile angezeigt.

Wenn der Interpreter auf ein Dollarzeichen stößt, beginnt er sequentiell zu prüfen, ob alle nachfolgenden Zeichen gültige Zeichen im Variablennamen sind. Um einen gültigen Variablennamen zu bilden, werden also so viele Zeichen wie möglich erfasst:

$str = "Welt!"; echo „Hallo $str“;

Komplexe Syntax- Dies ist der Fall, wenn der Variablenname in geschweifte Klammern eingeschlossen wird.

Da der Interpreter zur Verarbeitung einer Variablen in einer Zeile möglichst viele Zeichen erfasst, gibt es Situationen, in denen der Interpreter nicht selbstständig bestimmen kann, wo der Variablenname endet:

$sport1 = "wird"; $sport2 = "Fuß"; echo „Ich mag $sport1ball und $sport2ball“;

In diesem Fall wird das gewünschte Ergebnis nicht erzielt, da der Interpreter $sport1 als Teil des Variablennamens $sport1bol betrachtet, der nicht existiert.

Um dem Interpreter explizit mitzuteilen, wo ein Variablenname endet, müssen Sie den Variablennamen in geschweifte Klammern einschließen:

$sport1 = "wird"; $sport2 = "Fuß"; echo „Ich mag ($sport1)bol und ($sport2)bol.“;

Das Dollarzeichen kann entweder vor oder nach der geschweiften Klammer platziert werden:

$sport1 = "wird"; $sport2 = "Fuß"; echo „Ich mag $(sport1)bol und ($sport2)bol.“;

Verkettung

Unter Verkettung versteht man das Zusammenfügen von zwei oder mehr Zeichenfolgen zu einer größeren Zeichenfolge. Die Verkettung erfolgt mit dem Verkettungsoperator - . (Punkt). Beim Verketten wird jede nachfolgende Zeile am Ende der vorherigen hinzugefügt:

Ein Wert eines beliebigen Typs, der mit einer Zeichenfolge verkettet ist, wird implizit in eine Zeichenfolge konvertiert und dann verkettet:

"; echo "Nummer: " . 1; ?>

Der einfachste Weg, eine Zeichenfolge zu definieren, besteht darin, sie in einfache Anführungszeichen (das Symbol) zu setzen " ).

Um ein einfaches Anführungszeichen innerhalb einer Zeichenfolge zu verwenden, maskieren Sie es mit einem Backslash ( \ ). \\ Wenn Sie den Backslash selbst schreiben müssen, duplizieren Sie ihn ( ). Alle anderen Verwendungen von Backslashes werden als normale Zeichen interpretiert. Dies bedeutet, dass, wenn Sie versuchen, andere Escape-Sequenzen zu verwenden, z \R oder

\N , werden sie unverändert ausgegeben und weisen kein besonderes Verhalten auf.;

\N Echo
„Das ist eine einfache Zeichenfolge“
„Sie können auch in Zeilen einfügen
;

Newline-Zeichen wie dieses,
\N Das ist in Ordnung“;

// Ausgaben: Arnold hat einmal gesagt: „Ich komme wieder“ „Eines Tages sagte Arnold: ‚Ich komme wieder.‘“;

Echo
„Haben Sie C:\\*.* gelöscht?“

// Ausgaben: Haben Sie C:\*.* gelöscht?
\N „Dies wird nicht erweitert: \n newline“;

// Ausgaben: $expand- und $either-Variablen werden nicht erweitert
\N „$expand- und $either-Variablen werden nicht erweitert“;
?>

Doppelte Anführungszeichen

Wenn die Zeichenfolge in doppelte Anführungszeichen (") eingeschlossen ist, erkennt PHP weitere Escape-Sequenzen für Sonderzeichen:

Escape-Sequenzen
Folge Bedeutung
\R Newline (LF oder 0x0A (10) in ASCII)
). Wagenrücklauf (CR oder 0x0D (13) in ASCII)
\T horizontaler Tabulator (HT oder 0x09 (9) in ASCII)
\v vertikaler Tab (VT oder 0x0B (11) in ASCII) (seit PHP 5.2.5)
\e Escape-Zeichen (ESC oder 0x1B (27) in ASCII) (seit PHP 5.4.4)
\F Seitenfeed (FF oder 0x0C (12) in ASCII) (seit PHP 5.2.5)
\\ Backslash
\$ Dollarzeichen
\" doppeltes Anführungszeichen
\{1,3} Folge von Zeichen, die einem regulären Ausdruck eines Zeichens im oktalen Zahlensystem entspricht
\x(1,2) Zeichenfolge, die dem regulären Ausdruck eines Zeichens in hexadezimaler Schreibweise entspricht

Wie bei einer in einfache Anführungszeichen eingeschlossenen Zeichenfolge führt das Escapezeichen für ein beliebiges Zeichen auch zur Ausgabe des Backslashs selbst. Vor PHP 5.1.1 Backslash ein \($var) wurde nicht veröffentlicht.

Heredoc

Die dritte Möglichkeit, Zeichenfolgen zu definieren, ist die Verwendung der Heredoc-Syntax: <<< . Nach diesem Operator müssen Sie einen Bezeichner und dann einen Zeilenvorschub angeben. Danach kommt die Zeile selbst und dann derselbe Bezeichner, der die Einfügung abschließt.

Linie sollen Beginnen Sie mit einem Schlussbezeichner, d. h. es muss in der ersten Spalte der Zeile erscheinen. Darüber hinaus muss der Bezeichner denselben Namensregeln folgen wie alle anderen Tags in PHP: Er darf nur alphanumerische Zeichen und einen Unterstrich enthalten und darf nicht mit einer Zahl beginnen (Unterstriche sind zulässig).

Aufmerksamkeit

Es ist sehr wichtig zu beachten, dass die abschließende Bezeichnerzeile keine anderen Zeichen außer einem Semikolon enthalten darf ( ; ). Das bedeutet, dass die ID sollte nicht eingerückt werden und dass vor oder nach dem Semikolon keine Leerzeichen oder Tabulatoren stehen dürfen. Es ist auch wichtig zu verstehen, dass das erste Zeichen vor dem Schlussbezeichner das von Ihrem Betriebssystem definierte Zeilenumbruchzeichen sein muss. Auf UNIX-Systemen, einschließlich Mac OS X, ist dies beispielsweise der Fall \R. Nach dem Schlussbezeichner muss auch unmittelbar eine neue Zeile beginnen.

Wenn diese Regel verletzt wird und der Schlussbezeichner nicht „sauber“ ist, wird der Schlussbezeichner als fehlend betrachtet und PHP wird weiter danach suchen. Wenn in diesem Fall nie der richtige Abschlussbezeichner gefunden wird, führt dies zu einem Parsing-Fehler mit der Zeilennummer am Ende des Skripts.

Heredoc kann nicht zum Initialisieren von Klassenfeldern verwendet werden.

Ab PHP 5.3 gilt diese Einschränkung nur für Heredocs, die Variablen enthalten.

Beispiel Nr. 1 Falsches Beispiel
Klasse foo (<<öffentliche $bar =
Bar
}
?>

EOT;

Heredoc-Text verhält sich genauso wie eine Zeichenfolge in doppelten Anführungszeichen, ohne diese. Das bedeutet, dass Sie in Heredoc keine Escape-Anführungszeichen benötigen, Sie können aber trotzdem die oben genannten Escape-Sequenzen verwenden.

Variablen werden verarbeitet, Sie müssen jedoch bei der Verwendung komplexer Variablen in Heredoc genauso vorsichtig sein wie bei der Arbeit mit Zeichenfolgen.<<Beispiel Nr. 2 Beispiel für die Definition einer Heredoc-Zeichenfolge
$str =
Beispielzeile,
mehrere Zeilen abdeckend,

unter Verwendung der Heredoc-Syntax.
{
EOD;
Klasse foo

var $foo ;
{
var $bar ;
Funktion foo()
}
}

$this -> foo = "Foo" ;
$this ->

$foo = new foo();<<$name = "MeinName" ; .
Echo
Mein Name ist „$name“. Ich tippe $foo -> foo .
Jetzt schließe ich
( $foo -> bar [ 1 ])
?>

Dies sollte den Großbuchstaben „A“ ausgeben: \x41

EOT;

Mein Name ist „MyName“. Ich tippe Foo. Jetzt gebe ich Bar2 aus. Dies sollte einen Großbuchstaben „A“ ausgeben: A

Es ist auch möglich, die Heredoc-Syntax zu verwenden, um Daten über Funktionsargumente zu übergeben:

Seit Version 5.3.0 ist es möglich, statische Variablen und Klasseneigenschaften/Konstanten mithilfe der Heredoc-Syntax zu initialisieren:
Beispiel #4 Verwendung von Heredoc zum Initialisieren statischer Variablen
{
// Statische Variablen<<Funktion foo()
statisch $bar =
}

Hier ist nichts...
ETIKETT;
{
// Klasseneigenschaften/Konstanten<<Klasse foo
const BAR =

Beispiel für die Verwendung einer Konstante<<FOOBAR;
const BAR =
}
?>

Öffentlich $baz =

Beispiel für die Verwendung eines Feldes

Ab PHP 5.3.0 können Sie den Heredoc-Bezeichner auch in doppelte Anführungszeichen setzen: Nowdoc Nowdoc ist für Zeichenfolgen in einfachen Anführungszeichen dasselbe wie Heredoc für Zeichenfolgen in doppelten Anführungszeichen. Nowdoc ähnelt Heredoc, ist jedoch darin enthalten

Nowdoc wird durch die gleiche Reihenfolge angezeigt <<< , das in Heredoc verwendet wird, der folgende Bezeichner jedoch in einfache Anführungszeichen gesetzt wird, zum Beispiel: <<<"EOT" .

Alle Bedingungen, die für Heredoc-Bezeichner gelten, gelten auch für Nowdoc, insbesondere diejenigen, die für den Schlussbezeichner gelten.

Variablen werden verarbeitet, Sie müssen jedoch bei der Verwendung komplexer Variablen in Heredoc genauso vorsichtig sein wie bei der Arbeit mit Zeichenfolgen.<<<"EOD"
Beispiel Nr. 6 Nowdoc-Beispiel
Beispieltext,
über mehrere Zeilen hinweg
mehrere Zeilen abdeckend,

unter Verwendung der Nowdoc-Syntax.
ETIKETT;
{
/* Komplexeres Beispiel mit Variablen. */
öffentliches $foo ;

var $foo ;
{
var $bar ;
öffentliche $bar ;
}
}

$this -> foo = "Foo" ;
$this ->

$foo = new foo();<<<"EOT"
$this -> bar = array("Bar1" , "Bar2" , "Bar3" );
Mein Name ist „$name“. Ich gebe $foo->foo aus.
Jetzt drucke ich ($foo->bar).
( $foo -> bar [ 1 ])
?>

Dies sollte kein großes „A“ ausgeben: \x41

Das Ergebnis der Ausführung dieses Beispiels:

Mein Name ist „$name“. Ich gebe $foo->foo aus. Jetzt drucke ich ($foo->bar). Dies sollte kein großes „A“ ausgeben: \x41:

Kommentar

Im Gegensatz zu Heredoc kann Nowdoc in jedem Kontext mit statischen Daten verwendet werden. Ein typisches Beispiel für die Initialisierung von Klassenfeldern oder Konstanten:

Beispiel Nr. 1 Falsches Beispiel
Klasse foo (<<<"EOT"
öffentliche $bar =
( $foo -> bar [ 1 ])
}
?>

Mein Name ist „$name“. Ich gebe $foo->foo aus. Jetzt drucke ich ($foo->bar). Dies sollte kein großes „A“ ausgeben: \x41:

Beispiel Nr. 7 Beispiel für die Verwendung statischer Daten

Nowdoc-Unterstützung wurde in PHP 5.3.0 hinzugefügt.

Umgang mit Variablen

Wenn eine Zeichenfolge in doppelten Anführungszeichen oder mithilfe von Heredoc angegeben wird, werden die darin enthaltenen Variablen verarbeitet. Es gibt zwei Arten von Syntax: einfache und komplexe. Eine einfache Syntax ist einfacher und bequemer. Es ermöglicht die Verarbeitung einer Variablen, eines Array-Werts ( Array) oder Objekteigenschaften (

Objekt

) mit minimalem Aufwand.

Komplexe Syntax erkennt man an den geschweiften Klammern, die den Ausdruck umgeben. $ Einfache Syntax

Wenn der Dolmetscher auf ein Dollarzeichen stößt (

), werden so viele Zeichen wie möglich erfasst, um den korrekten Variablennamen zu bilden. Wenn Sie das Ende eines Namens angeben möchten, schließen Sie den Variablennamen in geschweifte Klammern ein.
$saft = "Apfel" ;
echo „Er hat etwas Saft getrunken.“ . PHP_EOL ;
// funktioniert nicht, „s“ ist ein gültiges Zeichen für einen Variablennamen,
?>

Dies sollte kein großes „A“ ausgeben: \x41

// aber unsere Variable heißt $juice.

echo „Er hat Saft aus $ Juices getrunken.“ ; Es gibt zwei Arten von Syntax: einfache und komplexe. Er trank etwas Apfelsaft. Er trank etwas Saft aus … Array Ein Array-Element ( ] ) oder Objekteigenschaft (

).

In Array-Indizes gibt es eine schließende eckige Klammer (

) markiert das Ende der Indexdefinition.
Für Objekteigenschaften gelten die gleichen Regeln wie für einfache Variablen.
echo „Er hat ein paar $juices [koolaid1] Saft getrunken.“ . PHP_EOL ;

Klasse Leute (
public $john = "John Smith" ;
public $jane = "Jane Smith" ;
public $robert = "Robert Paulsen" ;

Öffentlich $smith = "Smith" ;
}

$people = neue Leute();

echo „$people -> john hat ein paar $juices [ 0 ] Saft getrunken.“ . PHP_EOL ;
echo „ $people -> john sagte dann Hallo zu $people -> jane .“ . PHP_EOL ;
echo „$people -> Johns Frau begrüßte $people -> Robert.“ . PHP_EOL;
echo „ $people -> robert begrüßte die beiden $people -> smiths .“ ; // Funktioniert nicht
?>

Dies sollte kein großes „A“ ausgeben: \x41

Er trank etwas Apfelsaft. Er trank etwas Orangensaft. Er trank etwas lila Saft. John Smith trank etwas Apfelsaft. John Smith begrüßte dann Jane Smith. John Smiths Frau begrüßte Robert Paulsen.

Für alles, was komplexer ist, verwenden Sie eine komplexe Syntax.

Komplexe (geschweifte) Syntax

Es wird nicht deshalb als komplex bezeichnet, weil es schwer zu verstehen ist, sondern weil es die Verwendung komplexer Ausdrücke ermöglicht.

Mit dieser Syntax kann jede skalare Variable, jedes Array-Element oder jede Objekteigenschaft, die einer Zeichenfolge zugeordnet ist, in einer Zeichenfolge dargestellt werden. { Und } Schreiben Sie den Ausdruck einfach auf die gleiche Weise, wie Sie es außerhalb der Zeile tun würden, und schließen Sie ihn dann ein { . $ Seit { kann nicht maskiert werden, diese Syntax wird nur erkannt, wenn {\$ folgt direkt {$ . Verwenden

zu drucken
.

Ein paar anschauliche Beispiele:

// Alle Fehler anzeigen
error_reporting(E_ALL);

$great = "großartig" ;
// Funktioniert nicht, gibt Folgendes aus: Das ist (großartig)
echo „Das ist ( $great )“ ;

// Funktioniert, gibt aus: Das ist großartig
\N echo „Das ist ($great)“; echo „Das ist $(großartig)“;

// Funktioniert
„Dieser Platz ist breit

// Funktioniert, gibt aus: Das ist großartig
( $square -> width ) 00 Zentimeter." ;

// Funktioniert, in Anführungszeichen gesetzte Schlüsselwörter funktionieren nur mit der Syntax in geschweiften Klammern
echo „Das funktioniert: ( $arr [ „key“ ]) „ ;
echo „Das funktioniert: ( $arr [ 4 ][ 3 ])“ ;
// Dies ist aus demselben Grund ungültig wie $foo außerhalb
\N // Zeilen. Mit anderen Worten, es wird immer noch funktionieren,// aber da PHP zuerst nach der Konstante foo sucht, wird dies dazu führen

// Levelfehler E_NOTICE (undefinierte Konstante).
„Das ist falsch:
( $arr [ foo ][ 3 ]) " ;

// Funktioniert. Bei interner Verwendung mehrdimensionaler Arrays
// Zeilen verwenden immer geschweifte Klammern

\N echo "Das funktioniert: ( $arr [ "foo" ][ 3 ]) " ;// Funktioniert.

\N echo „Das funktioniert:“ . $arr [ "foo" ][ 3 ];„Das funktioniert auch:

\N ( $obj -> Werte [ 3 ] -> Name ) " ;($( getName ())) " ;

\N „Dies ist der Wert der Variablen nach Namen, die \$object->getName() zurückgibt:($( $object -> getName ())) " ;

// Funktioniert nicht, gibt Folgendes aus: Das gibt getName() zurück: (getName())
\N „Das gibt getName() zurück: (getName())“;
?>

Mit dieser Syntax ist es auch möglich, auf Objekteigenschaften innerhalb von Strings zuzugreifen.

Beispiel Nr. 1 Falsches Beispiel
var $bar = „Ich bin bar.“ ;
}

$this -> foo = "Foo" ;
$bar = "bar" ;
$baz = array("foo" , "bar" , "baz" , "quux" );
echo " ( $foo -> $bar ) \n" ;
echo " ( $foo -> $baz [ 1 ]) \n" ;
?>

Dies sollte kein großes „A“ ausgeben: \x41

Ich bin Bar. Ich bin Bar.

Mein Name ist „$name“. Ich gebe $foo->foo aus. Jetzt drucke ich ($foo->bar). Dies sollte kein großes „A“ ausgeben: \x41:

Funktionen, Methodenaufrufe, statische Klassenvariablen und Klassenkonstanten funktionieren intern {$} , beginnend mit PHP 5. Der bereitgestellte Wert wird jedoch im selben Kontext wie die Zeile, in der er definiert ist, als Variablenname behandelt. {} Mit einzelnen geschweiften Klammern (

zu drucken
.

) funktioniert nicht für den Zugriff auf die Werte von Funktionen, Methoden, Klassenkonstanten oder statischen Klassenvariablen.
Klasse Biere (
const softdrink = "rootbeer" ;
}

public static $ale = "ipa" ;
$rootbeer = "A & W" ;

$ipa = „Alexander Keith\“s“ ;
// Das funktioniert, gibt aus: I would like A & W

echo „Ich hätte gerne ($( beers :: softdrink )) \n“ ;
// Das funktioniert auch, gibt aus: I would like Alexander Keith's
?>

echo „Ich hätte gerne ($( beers :: $ale )) \n“ ;

Auf ein Zeichen in einer Zeichenfolge zugreifen und es ändern Zeichen in Zeichenfolgen können verwendet und geändert werden, indem ihr Offset vom Anfang der Zeichenfolge, beginnend mit Null, in eckigen Klammern nach der Zeichenfolge angegeben wird, beispielsweise $str . Und Stellen Sie sich eine Zeichenfolge zu diesem Zweck als eine Reihe von Zeichen vor..

Mein Name ist „$name“. Ich gebe $foo->foo aus. Jetzt drucke ich ($foo->bar). Dies sollte kein großes „A“ ausgeben: \x41: Wenn Sie mehr als ein Zeichen abrufen oder ersetzen müssen, können Sie die Funktionen verwenden

Aufmerksamkeit

substr() substr_replace() Auf ein Zeichen in einer Zeichenfolge kann auch mit geschweiften Klammern zugegriffen werden, beispielsweise $str(42) . substr_replace() Wenn Sie versuchen, an einen Offset zu schreiben, der über die Zeilengrenzen hinausgeht, wird die Zeichenfolge bis zu diesem Offset mit Leerzeichen aufgefüllt. Nicht ganzzahlige Typen werden in ganzzahlige Typen konvertiert.

Aufmerksamkeit

Der falsche Offset-Typ führt zu einem Pegelfehler

E_NOTICE

.
Das Schreiben auf einen negativen Offset führt zu einem Pegelfehler
, und beim Lesen wird eine leere Zeichenfolge zurückgegeben.

// Holen Sie sich das dritte Zeichen der Zeichenfolge
$third = $str [ 2 ];

// Das letzte Zeichen der Zeichenfolge abrufen
$str = "Dies ist immer noch ein Test." ;
$last = $str [ strlen ($str ) - 1 ];

// Letztes Zeichen der Zeile ändern
$str = "Schau dir das Meer an" ;
$str [ strlen ($str )- 1 ] = "e" ;

?>

Ab PHP 5.4 muss der Offset im String entweder als Ganzzahl oder als String mit Ziffern angegeben werden, andernfalls wird eine Warnung ausgegeben. Zuvor durch eine Zeichenfolge wie angegebener Offset „foo“, ohne Vorwarnung verwandelte sich in 0 .

Beispiel Nr. 10 Unterschiede zwischen PHP 5.3 und PHP 5.4

$str = "abc" ;

Var_dump($str["1"]);
var_dump (isset($str [ "1" ]));

Var_dump($str["1.0"]);
var_dump (isset($str [ "1.0" ]));

Var_dump($str["x"]);
var_dump (isset($str [ "x" ]));

Var_dump($str["1x"]);
var_dump (isset($str [ "1x" ]));
?>

Das Ergebnis der Ausführung dieses Beispiels in PHP 5.3:

string(1) „b“ bool(true) string(1) „b“ bool(true) string(1) „a“ bool(true) string(1) „b“ bool(true)

Das Ergebnis der Ausführung dieses Beispiels in PHP 5.4:

string(1) „b“ bool(true) Warnung: Unzulässiger String-Offset „1.0“ in /tmp/t.php in Zeile 7 string(1) „b“ bool(false) Warnung: Unzulässiger String-Offset „x“ in / tmp/t.php in Zeile 9 string(1) „a“ bool(false) string(1) „b“ bool(false)

Mein Name ist „$name“. Ich gebe $foo->foo aus. Jetzt drucke ich ($foo->bar). Dies sollte kein großes „A“ ausgeben: \x41:

Es wird versucht, mit auf Variablen anderer Typen zuzugreifen (ausgenommen Arrays oder Objekte, die bestimmte Schnittstellen implementieren). oder {} wird stillschweigend zurückkehren NULL.

Mein Name ist „$name“. Ich gebe $foo->foo aus. Jetzt drucke ich ($foo->bar). Dies sollte kein großes „A“ ausgeben: \x41:

PHP 5.5 hat Unterstützung für den Zugriff auf Zeichen in String-Literalen mithilfe der Syntax hinzugefügt Alle anderen Verwendungen von Backslashes werden als normale Zeichen interpretiert. Dies bedeutet, dass, wenn Sie versuchen, andere Escape-Sequenzen zu verwenden, z {} .

Es gibt viele nützliche Funktionen zum Ändern von Zeichenfolgen.

Grundlegende Funktionen werden im Abschnitt über Zeichenfolgenfunktionen sowie für erweiterte Such- und Ersetzungsfunktionen, reguläre Ausdrücke oder Perl-kompatible reguläre Ausdrucksfunktionen beschrieben.

In String konvertieren

Der Wert kann mithilfe eines Casts in einen String umgewandelt werden (Zeichenfolge), oder Funktionen strval(). \N oder Bei Ausdrücken, bei denen eine Zeichenfolge erforderlich ist, erfolgt die Konvertierung automatisch. Dies geschieht, wenn Sie Funktionen verwenden drucken.

oder wenn der Wert einer Variablen mit einer Zeichenfolge verglichen wird. Das Lesen der Abschnitte „Typen“ und „Typmanipulation“ im Handbuch wird Folgendes klarer machen. Siehe auch settype() Arrays werden immer in String konvertiert Es gibt zwei Arten von Syntax: einfache und komplexe.„Array“ \N Alle anderen Verwendungen von Backslashes werden als normale Zeichen interpretiert. Dies bedeutet, dass, wenn Sie versuchen, andere Escape-Sequenzen zu verwenden, z Bei Ausdrücken, bei denen eine Zeichenfolge erforderlich ist, erfolgt die Konvertierung automatisch., sodass Sie den Inhalt des Arrays nicht anzeigen können ( ), mit um zu sehen, was es enthält. Um ein einzelnes Element anzuzeigen, verwenden Sie etwas wie

echo $arr["foo"] . Nachfolgend finden Sie Tipps zum Anzeigen/Anzeigen aller Inhalte.. Array Wenn Sie die Werte der Felder eines Objekts anzeigen möchten ( ) zu Debugging-Zwecken, lesen Sie weiter. Wenn Sie den Klassennamen des erforderlichen Objekts erhalten möchten, verwenden Sie get_class()

NULL. Seit PHP 5 ist auch die Methode __toString verfügbar.

wird immer in den leeren String konvertiert. Wie Sie oben sehen können, liefert die direkte Konvertierung von Arrays, Objekten oder Ressourcen in einen String keine nützlichen Informationen über die Werte selbst außer ihren Typen. Und Eine bessere Möglichkeit, Werte zum Debuggen auszugeben, ist die Verwendung von Funktionen.

print_r() var_dump() Die meisten Werte in PHP können zur dauerhaften Speicherung in einen String umgewandelt werden. Diese Methode wird Serialisierung genannt und kann mithilfe der Funktion durchgeführt werden

serialisieren()

. Wenn Ihre PHP-Installation außerdem über WDDX-Unterstützung verfügt, ist auch die Serialisierung in eine XML-Struktur möglich.

Konvertieren von Zeichenfolgen in Zahlen Wenn die Zeichenfolge als numerischer Wert erkannt wird, werden der resultierende Wert und der resultierende Typ wie folgt bestimmt. Wenn die Zeichenfolge keines der Zeichen „.“, „e“ oder „E“ enthält und der Wert der Zahl innerhalb der Grenzen von Ganzzahlen liegt (definiert PHP_INT_MAX), wird die Zeichenfolge als Ganzzahl erkannt ( ganze Zahl).

).

In allen anderen Fällen wird es als Gleitkommazahl betrachtet ( schweben
Der Wert wird durch den Anfang der Zeichenfolge bestimmt. Wenn die Zeile mit einem gültigen numerischen Wert beginnt, wird dieser Wert verwendet. Andernfalls ist der Wert 0 (Null). Ein gültiger numerischer Wert besteht aus einer oder mehreren Ziffern (die einen Dezimalpunkt enthalten können), optional mit vorangestelltem Vorzeichen und gefolgt von einem optionalen Exponenten. Der Exponent ist „e“ oder „E“, gefolgt von einer oder mehreren Ziffern. $foo = 1 + "10,5" ;
// $foo ist ein Float (11.5)
$foo = 1 + "-1.3e3" ;
// $foo ist ein Float (-1299) $foo = 1 + "bob-1.3e3" ; // $foo ist eine Ganzzahl (1)
$foo = 1 + "bob3" ; // $foo ist eine Ganzzahl (1) $foo = 1 + "10 kleine Schweine" ;
// $foo ist eine Ganzzahl (11)
$foo = 4 + "10.2 kleine Schweinchen" ;
?>

// $foo ist ein Float (14.2)

$foo = "10.0 Schweine" + 1 ; // $foo ist Float (11)

$foo = "10.0 Schweine" + 1.0 ; // $foo ist float (11)
Weitere Informationen zu dieser Konvertierung finden Sie im Abschnitt zu strtod(3) in der Unix-Dokumentation.
?>

Erwarten Sie nicht, den Code eines Zeichens zu erhalten, indem Sie es in eine Ganzzahl umwandeln (wie es beispielsweise in C geschieht). Verwenden Sie die Funktionen, um Zeichen in ihre ASCII-Codes und zurück umzuwandeln ord() Und chr().

Details zur Implementierung des String-Typs

String-Typ ( Zeichenfolge) wird in PHP als Array aus Bytes und einer Ganzzahl implementiert, die die Länge des Puffers enthält. Es enthält keine Informationen darüber, wie diese Bytes in Zeichen umgewandelt werden, sodass diese Aufgabe dem Programmierer überlassen wird. Für den Inhalt einer Zeichenfolge, beispielsweise eines Bytes mit einem Wert, gibt es keine Einschränkungen 0 („NUL“-Byte) kann sich an einer beliebigen Stelle befinden (beachten Sie jedoch, dass einige Funktionen, wie in diesem Handbuch angegeben, nicht „binärsicher“ sind, d. h. sie können Zeichenfolgen an Bibliotheken übergeben, die Daten nach dem NUL-Byte ignorieren).

Diese Art des String-Typs erklärt, warum PHP keinen separaten „Byte“-Typ hat – Strings spielen diese Rolle. Funktionen, die Nicht-Text-Daten zurückgeben – beispielsweise einen beliebigen Datenstrom, der von einem Netzwerk-Socket gelesen wird – geben weiterhin Zeichenfolgen zurück.

Angesichts der Tatsache, dass PHP keine bestimmte Kodierung für Strings vorschreibt, könnte man sich fragen, wie String-Literale dann kodiert werden. Zum Beispiel die Linie "á" Äquivalent „\xE1“(ISO-8859-1), „\xC3\xA1“(UTF-8, Normalisierungsform C), „\x61\xCC\x81“(UTF-8, Normalisierungsform D) oder eine andere mögliche Darstellung? Die Antwort ist, dass die Zeichenfolge so codiert wird, wie sie in der Skriptdatei geschrieben ist. Wenn das Skript also in ISO-8859-1-Kodierung geschrieben ist, wird die Zeichenfolge in ISO-8859-1 usw. kodiert. Diese Regel gilt jedoch nicht, wenn der Zend-Multibyte-Modus aktiviert ist: In diesem Fall kann das Skript in einer beliebigen Kodierung geschrieben werden (entweder explizit angegeben oder automatisch bestimmt) und dann in eine bestimmte interne Kodierung konvertiert werden, die anschließend verwendet wird String-Literale.

Um nützlich zu sein, müssen String-Funktionen natürlich einige Annahmen über die Codierung des Strings treffen. Leider gibt es unter den PHP-Funktionen recht unterschiedliche Lösungsansätze für dieses Problem:

  • Einige Funktionen gehen davon aus, dass die Zeichenfolge in einer Einzelbyte-Codierung codiert ist, sie müssen die Bytes jedoch nicht als bestimmte Zeichen interpretieren, um ordnungsgemäß zu funktionieren. Zeichen in Zeichenfolgen können verwendet und geändert werden, indem ihr Offset vom Anfang der Zeichenfolge, beginnend mit Null, in eckigen Klammern nach der Zeichenfolge angegeben wird, beispielsweise $str ., Zu dieser Kategorie gehören beispielsweise, strpos() strlen() Und strcmp()
  • . Eine andere Möglichkeit, über diese Funktionen nachzudenken, besteht darin, dass sie mit Speicherpuffern arbeiten, d. h. Sie arbeiten direkt mit Bytes und ihren Offsets.
  • Offsets. Andere Funktionen erwarten, dass eine Codierung als Parameter übergeben wird, und gehen möglicherweise von einer Standardcodierung aus, wenn kein Parameter mit einer Codierung angegeben wurde. Diese Funktion ist Schließlich gibt es Funktionen, die davon ausgehen, dass eine Zeichenfolge eine bestimmte Kodierung verwendet, normalerweise UTF-8. Die meisten Funktionen aus den Erweiterungen intl und PCRE fallen hierher (im letzteren Fall nur bei Angabe des Modifikators). u). Obwohl dies absichtlich geschieht, ist die Funktion utf8_decode() impliziert UTF-8-Kodierung und

utf8_encode()

- ISO-8859-1.

Letztendlich bedeutet das Schreiben korrekter Programme, die mit Unicode funktionieren, dass sorgfältig Funktionen vermieden werden, die nicht mit Unicode funktionieren und wahrscheinlich Daten beschädigen, und stattdessen gültige Funktionen verwendet werden, normalerweise aus den Erweiterungen intl und mbstring.

Allerdings ist die Verwendung von Unicode-fähigen Funktionen ein guter Anfang. Unabhängig von den Funktionen, die eine Sprache bietet, ist es notwendig, die Spezifikation von Unicode selbst zu kennen. Wenn ein Programm beispielsweise davon ausgeht, dass in einer Sprache nur Klein- und Großbuchstaben existieren, dann begeht es einen großen Fehler.

Der Grund dafür ist einfach: Der PHP-Interpreter prüft zusätzlich Zeichenfolgen in doppelten Anführungszeichen auf das Vorhandensein von Variablen und wenn diese gefunden werden, wird anstelle des Variablennamens deren Wert in die Zeichenfolge eingefügt. Eine in Apostrophe eingeschlossene Zeile wird jedoch vom Interpreter als normaler Text wahrgenommen und PHP führt in diesen Zeilen keine Transformationen durch. Ich denke, es ist klar, dass die Verarbeitung von Zeichenfolgen in einfachen Anführungszeichen auf jeden Fall schneller sein wird.

Lassen Sie uns zunächst beschreiben, wie eine Zeichenfolge definiert wird, und prüfen Sie dann, wie viel schneller es ist, Zeichenfolgen in einfachen Anführungszeichen zu verarbeiten.

Der einfachste Weg, eine Zeichenfolge zu definieren, besteht darin, sie in einfache Anführungszeichen (") zu setzen. Um einfache Anführungszeichen innerhalb einer Zeichenfolge in einfachen Anführungszeichen zu verwenden, muss ihnen ein Backslash (\) vorangestellt werden, d. h. ein Escapezeichen. Wenn der Backslash kommen muss vor einem einfachen Anführungszeichen oder am Ende der Zeile müssen Sie es duplizieren. Wenn Sie versuchen, ein anderes Zeichen zu maskieren, wird der Backslash ebenfalls gedruckt.

Hier ist ein Beispiel für die Verwendung von einfachen Anführungszeichen:
// Ausgabe: Einfache Zeichenfolge
echo „Einfache Zeichenfolge“;
// Druckt: Ich bin hier
echo „Ich bin hier“;
// Ausgabe: Dies wird nicht eingefügt: \n neue Zeile
echo „Dies wird nicht eingefügt:\nnewline“;
// Ausgaben: Die Variable $example wird ebenfalls nicht ersetzt
echo „Die Variable $example wird ebenfalls nicht ersetzt“;

Wenn eine Zeichenfolge in doppelte Anführungszeichen (") eingeschlossen ist, erkennt PHP weitere Escape-Sequenzen für Sonderzeichen und ersetzt auch den Variablennamen in der Zeichenfolge für ihren Wert. Genau wie bei einfachen Anführungszeichen, um doppelte Anführungszeichen innerhalb einer in eingeschlossenen Zeichenfolge zu verwenden In doppelte Anführungszeichen muss ihnen ein Backslash-Zeichen (\) vorangestellt werden.
// Ausgabe: Einfache Zeichenfolge
echo „Einfache Zeichenfolge“;
Hier ist ein Beispiel für die Verwendung doppelter Anführungszeichen:
// Ausgaben: Firma „Snowdrop“
echo "Firma \"Snowdrop\"";
// Ausgabe: Dies führt zu einer neuen Zeile
echo „Dies führt zu einer neuen Zeile \n“;
// Ausgabe: Die Variable wird ersetzt
$example = "wird ersetzt";

Lassen Sie uns herausfinden, wie viel schneller einfache Anführungszeichen sind als doppelte Anführungszeichen. Für Messungen schreiben wir ein kurzes Testskript und stellen sofort fest, dass bei einem Selbsttest die Ergebnisse, abhängig von der Hardware Ihres PCs oder Servers, unterschiedlich ausfallen.
// Den Zeitstempel am Anfang der Schleife zurückgeben
$start = microtime(true);
// Erstellen Sie eine Schleife für 1 Million Iterationen
für ($i = 0; $i< 1000000; $i++) {
$text = "Hier ist eine Zeichenfolge";
}
// Berechnen Sie die aufgewendete Zeit
$time = (microtime(true) - $start);

Ergebnis: 0,09 Sekunden.
Wenn wir einfache Anführungszeichen durch doppelte Anführungszeichen ersetzen:

$text = "Hier ist eine Zeichenfolge";
Das Ergebnis beträgt 0,10 Sekunden.
Wie Sie sehen, ist der Unterschied in der Ausführungszeit bei der Verwendung von Textzeichenfolgen sehr gering, man könnte sogar sagen, dass er überhaupt nicht existiert. Der Spaß beginnt, wenn wir versuchen, einen String und eine Variable zu kombinieren.

$text = "Hier ist die Zeichenfolge $i";

oder

$text = $i. „Hier ist eine Zeichenfolge“;

Ergebnis ca.: 0,27 Sekunden.

Der Unterschied ist durchaus spürbar. Verkettungen und doppelte Anführungszeichen wirken sich deutlich auf die Leistung aus, wenn der Zeichenfolge Variablen hinzugefügt werden.

Wenn wir den Text daher „wie er ist“ anzeigen müssen, verwenden wir einfache Anführungszeichen. Wenn Sie ihren Wert anstelle einer Variablen ersetzen müssen, verwenden Sie doppelte Einsen (wenn es nur eine Variable gibt, können Sie die Anführungszeichen ganz weglassen). Oft sieht man Code wie diesen:

Es wird nur Text angezeigt. Aber im Code ist es aus einem unbekannten Grund in doppelte Anführungszeichen gesetzt, was den Interpreter dazu zwingt, es auf das Vorhandensein von Variablen zu analysieren. Es ist richtig, den Text in einfache Anführungszeichen zu setzen.

Betrachten wir die triviale Aufgabe, eine Variable als Teil eines Textes anzuzeigen, einschließlich der Verwendung von HTML-Code.

$date"; ?>

Alles wird gut angezeigt, der Text und das Datum sind fett hervorgehoben und werden anstelle der Variablen ersetzt. Aber Sie müssen sich zwei Dinge merken. Erstens ist dies eine Funktion des Interpreters: Die Verkettung von Zeichenfolgen ist viel schneller und erfordert weniger Ressourcen als das Parsen von Zeichenfolgen. Und zweitens: Vergessen Sie nicht das Programmierparadigma „Teile und herrsche“. Es besteht keine Notwendigkeit, alles in einem zu vermischen; es wäre viel richtiger, den Text in zwei Teile zu unterteilen – diejenigen, die eine Analyse durch den Dolmetscher erfordern, und diejenigen, die keine Analyse erfordern. Das obige Beispiel sollte also wie folgt geschrieben werden:

".$date.""; ?>

Natürlich müssen Sie diese Regel befolgen (alles, was nicht analysiert werden muss, in einfache Anführungszeichen setzen), nicht nur bei der Anzeige von Text, sondern auch beim Zuweisen von Werten zu String-Variablen:

Oder zum Beispiel bei der Verwendung von Strings bei der Übergabe von Funktionsargumenten:

Und obwohl auf modernen Computern der Zeitgewinn für die Codeinterpretation aufgrund der Verwendung von einfachen oder doppelten Anführungszeichen praktisch nicht spürbar ist, insbesondere bei kleinen Skripten, lohnt es sich dennoch, sich von Anfang an daran zu gewöhnen, kompetenten Code zu schreiben, denn das ist viel einfacher Ich lerne es später noch einmal.