<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/language.types.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'de',
  ),
  'this' => 
  array (
    0 => 'language.types.string.php',
    1 => 'Strings (Zeichenketten)',
    2 => 'Strings (Zeichenketten)',
  ),
  'up' => 
  array (
    0 => 'language.types.php',
    1 => 'Typen',
  ),
  'prev' => 
  array (
    0 => 'language.types.float.php',
    1 => 'Gleitkommazahlen',
  ),
  'next' => 
  array (
    0 => 'language.types.numeric-strings.php',
    1 => 'Numerische Zeichenketten',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'de',
    'path' => 'language/types/string.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="language.types.string" class="sect1">
 <h2 class="title">Strings (Zeichenketten)</h2>

 <p class="para">
  Ein <span class="type"><a href="language.types.string.php" class="type String">String</a></span> stellt eine Kette von Zeichen dar, in der ein
  Zeichen gleichbedeutend mit einem Byte ist. Das bedeutet, es gibt exakt 256
  mögliche Zeichen. Es impliziert zudem, dass PHP keine native Unterstützung
  von Unicode bietet. Siehe auch
  <a href="language.types.string.php#language.types.string.details" class="link">Details zum String-Typ</a>.
 </p>

 <blockquote class="note"><p><strong class="note">Hinweis</strong>: 
  <span class="simpara">
   Unter 32-bit-Versionen kann ein <span class="type"><a href="language.types.string.php" class="type String">String</a></span> bis zu 2GB (maximal
   2147483647 Bytes) groß werden.
  </span>
 </p></blockquote>

 <div class="sect2" id="language.types.string.syntax">
  <h3 class="title">Syntax</h3>

  <p class="para">
   Ein <span class="type"><a href="language.types.string.php" class="type String">String</a></span>-Literal kann auf vier unterschiedliche Arten
   spezifiziert werden:
  </p>

  <ul class="itemizedlist">
   <li class="listitem">
    <span class="simpara">
     <a href="language.types.string.php#language.types.string.syntax.single" class="link">einfache Anführungszeichen</a>
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <a href="language.types.string.php#language.types.string.syntax.double" class="link">doppelte Anführungszeichen</a>
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <a href="language.types.string.php#language.types.string.syntax.heredoc" class="link">Heredoc-Syntax</a>
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <a href="language.types.string.php#language.types.string.syntax.nowdoc" class="link">Nowdoc-Syntax</a>
    </span>
   </li>
  </ul>

  <div class="sect3" id="language.types.string.syntax.single">
   <h4 class="title">Einfache Anführungszeichen</h4>

   <p class="para">
    Der einfachste Weg einen <span class="type"><a href="language.types.string.php" class="type String">String</a></span> anzugeben, ist ihn mit
    einfachen Anführungszeichen (das Zeichen <code class="literal">&#039;</code>) zu
    umschließen.
   </p>

   <p class="para">
    Um ein einfaches Anführungszeichen hierin anzugeben, fügen sie einen
    Backslash (<code class="literal">\</code>) vor dem Zeichen ein. Um einen Backslash
    als Zeichen anzugeben, verdoppeln Sie ihn (<code class="literal">\\</code>).  Alle
    anderen Instanzen von Backslash werden als buchstäblicher Backslash
    behandelt: Das bedeutet, dass die anderen Escape-Sequenzen, die Sie
    vielleicht gewohnt sind, wie <code class="literal">\r</code> oder
    <code class="literal">\n</code>, buchstäblich wie angegeben ausgegeben werden und
    keine besondere Bedeutung haben.
   </p>

   <blockquote class="note"><p><strong class="note">Hinweis</strong>: 
    <span class="simpara">
     Im Gegensatz zu den
     <a href="language.types.string.php#language.types.string.syntax.double" class="link">doppelten Anführungszeichen</a>- und
     <a href="language.types.string.php#language.types.string.syntax.heredoc" class="link">Heredoc</a>-Notationen
     werden <a href="language.variables.php" class="link">Variablen</a> und
     Escape-Sequenzen für Sonderzeichen <em>nicht</em> aufgelöst
     (ersetzt), wenn sie in einem mit einfachen Anführungszeichen
     umschlossenen <span class="type"><a href="language.types.string.php" class="type String">String</a></span> erscheinen.
    </span>
   </p></blockquote>

   <div class="example" id="example-1">
    <p><strong>Beispiel #1 Syntax-Varianten</strong></p>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">'dies ist ein einfacher String'</span><span style="color: #007700">, </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /><br />echo </span><span style="color: #DD0000">'Sie können auch Zeilenumbrüche<br />in dieser Art angeben,<br />dies ist okay so'</span><span style="color: #007700">, </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// Gibt aus: Arnold sagte einst: "I'll be back"<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">'Arnold sagte einst: "I\'ll be back"'</span><span style="color: #007700">, </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// Ausgabe: Sie löschten C:\*.*?<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">'Sie löschten C:\\*.*?'</span><span style="color: #007700">, </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// Ausgabe: Sie löschten C:\*.*?<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">'Sie löschten C:\*.*?'</span><span style="color: #007700">, </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// Ausgabe: Dies erzeugt keinen: \n Zeilenumbruch<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">'Dies erzeugt keinen: \n Zeilenumbruch'</span><span style="color: #007700">, </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// Ausgabe: Variablen werden $ebenfalls $nicht ersetzt<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">'Variablen werden $ebenfalls $nicht ersetzt'</span><span style="color: #007700">, </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>

  </div>

  <div class="sect3" id="language.types.string.syntax.double">
   <h4 class="title">Doppelte Anführungszeichen</h4>

   <p class="para">
    Wenn der <span class="type"><a href="language.types.string.php" class="type String">String</a></span> in doppelte Anführungszeichen
    (<code class="literal">&quot;</code>) eingeschlossen wird, interpretiert PHP die folgenden
    Escape-Sequenzen für Sonderzeichen:
   </p>

   <table class="doctable table">
    <caption><strong>Maskierte Zeichen</strong></caption>

    
     <thead>
      <tr>
       <th>Sequenz</th>
       <th>Bedeutung</th>
      </tr>

     </thead>


     <tbody class="tbody">
      <tr>
       <td><code class="literal">\n</code></td>
       <td>Zeilenumbruch (LF or 0x0A (10) in ASCII)</td>
      </tr>

      <tr>
       <td><code class="literal">\r</code></td>
       <td>Wagenrücklauf (CR or 0x0D (13) in ASCII)</td>
      </tr>

      <tr>
       <td><code class="literal">\t</code></td>
       <td>horizontaler Tabulator (HT or 0x09 (9) in ASCII)</td>
      </tr>

      <tr>
       <td><code class="literal">\v</code></td>
       <td>vertikaler Tabulator (VT or 0x0B (11) in ASCII)</td>
      </tr>

      <tr>
       <td><code class="literal">\e</code></td>
       <td>Escape-Zeichen (ESC or 0x1B (27) in ASCII)</td>
      </tr>

      <tr>
       <td><code class="literal">\f</code></td>
       <td>Seitenvorschub (FF or 0x0C (12) in ASCII)</td>
      </tr>

      <tr>
       <td><code class="literal">\\</code></td>
       <td>Backslash (Rückstrich)</td>
      </tr>

      <tr>
       <td><code class="literal">\$</code></td>
       <td>Dollar-Zeichen</td>
      </tr>

      <tr>
       <td><code class="literal">\&quot;</code></td>
       <td>doppeltes Anführungszeichen</td>
      </tr>

      <tr>
       <td><code class="literal">\[0-7]{1,3}</code></td>
       <td>
        Oktal: die Folge von Zeichen, die auf den regulären Ausdruck
        <code class="literal">[0-7]{1,3}</code> passt, ist ein Zeichen in oktaler
        Notation (z. B. <code class="literal">&quot;\101&quot; === &quot;A&quot;</code>), die stillschweigend
        überläuft, um in ein Byte zu passen (z. B. &quot;\400&quot; === &quot;\000&quot;)
       </td>
      </tr>

      <tr>
       <td><code class="literal">\x[0-9A-Fa-f]{1,2}</code></td>
       <td>
        Hexadezimal: die Folge von Zeichen, die auf den regulären Ausdruck
        <code class="literal">[0-9A-Fa-f]{1,2}</code> passt, ist ein Zeichen in
        hexadezimaler Schreibweise (z. B. <code class="literal">&quot;\x41&quot; === &quot;A&quot;</code>)
       </td>
      </tr>

      <tr>
       <td><code class="literal">\u{[0-9A-Fa-f]+}</code></td>
       <td>
        Unicode: die Folge von Zeichen, die auf den regulären Ausdruck
        <code class="literal">[0-9A-Fa-f]+</code> passt, ist ein Unicode-Codepunkt, der
        in der Zeichenkette als UTF-8-Darstellung des Codepunkts ausgegeben
        wird. Die geschweiften Klammern in der Zeichenkette sind erforderlich
        (z. B. <code class="literal">&quot;\u{41}&quot; === &quot;A&quot;</code>)
       </td>
      </tr>

     </tbody>
    
   </table>


   <p class="para">
    Wie bei <span class="type"><a href="language.types.string.php" class="type String">String</a></span>s in einfachen Anführungszeichen wird beim
    Maskieren aller anderen Zeichen der Backslash mit ausgegeben.
   </p>

   <p class="para">
    Das Auflösen von Variablen-Namen ist eine der wichtigsten Besonderheiten
    von in doppelten Anführungszeichen angegebenen <span class="type"><a href="language.types.string.php" class="type String">String</a></span>s. Siehe
    hierzu
    <a href="language.types.string.php#language.types.string.parsing" class="link">String-Interpolation</a>
    für weitere Details.
   </p>
  </div>

  <div class="sect3" id="language.types.string.syntax.heredoc">
   <h4 class="title">Heredoc</h4>

   <p class="simpara">
    Eine dritte Möglichkeit, <span class="type"><a href="language.types.string.php" class="type String">String</a></span>s zu begrenzen, stellt die
    Heredoc-Syntax dar: <code class="literal">&lt;&lt;&lt;</code>. Nach diesem Operator
    wird ein beliebiger Bezeichner angegeben, dann eine neue Zeile. Hiernach
    folgt der eigentliche <span class="type"><a href="language.types.string.php" class="type String">String</a></span> und abschließend erneut der
    Bezeichner, um die Auszeichnung abzuschließen.
   </p>

   <p class="simpara">
    Der schließende Bezeichner darf durch Leerzeichen oder Tabulatoren
    eingerückt sein, wobei in diesem Fall die Einrückung aus allen Zeilen des
    Doc-Strings entfernt wird. Vor PHP 7.3.0 <em>muss</em> der
    schließende Bezeichner in der ersten Spalte der Zeile beginnen.
   </p>

   <p class="simpara">
    Außerdem muss der schließende Bezeichner den gleichen Benennungsregeln
    folgen wie jeder andere Bezeichner in PHP: Er darf nur alphanumerische
    Zeichen sowie Unterstriche enthalten und muss mit einem nicht-numerischen
    Zeichen oder einem Unterstrich beginnen.
   </p>

   <div class="example" id="example-2">
    <p><strong>Beispiel #2 Grundlegendes Heredoc-Beispiel ab PHP 7.3.0</strong></p>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">// keine Einrückung<br /></span><span style="color: #007700">echo &lt;&lt;&lt;END<br /></span><span style="color: #DD0000">      a<br />     b<br />    c<br />\n<br /></span><span style="color: #007700">END;<br /><br /></span><span style="color: #FF8000">// vier Leerzeichen Einrückung<br /></span><span style="color: #007700">echo &lt;&lt;&lt;END<br /></span><span style="color: #DD0000">      a<br />     b<br />    c<br /></span><span style="color: #007700">    END;</span></span></code></div>
    </div>

    <div class="example-contents"><p>Das oben gezeigte Beispiel erzeugt mit PHP 7.3 folgende Ausgabe:</p></div>
    <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
      a
     b
    c

  a
 b
c
</pre></div>
    </div>
   </div>

   <p class="simpara">
    Wenn der schließende Bezeichner weiter eingerückt ist als alle Zeilen des
    Textkörpers, wird ein <span class="classname"><a href="class.parseerror.php" class="classname">ParseError</a></span> ausgelöst:
   </p>

   <div class="example" id="example-3">
    <p><strong>Beispiel #3 Der schließende Bezeichner darf nicht weiter eingerückt sein, als die Zeilen des Textkörpers</strong></p>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">echo &lt;&lt;&lt;END<br /></span><span style="color: #DD0000">  a<br /> b<br />c<br /></span><span style="color: #007700">   END;</span></span></code></div>
    </div>

    <div class="example-contents"><p>Das oben gezeigte Beispiel erzeugt mit PHP 7.3 folgende Ausgabe:</p></div>
    <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
Parse error: Invalid body indentation level (expecting an indentation level of at least 3) in example.php on line 4
</pre></div>
    </div>
   </div>

   <p class="simpara">
    Wenn der schließende Bezeichner eingerückt ist, können auch Tabulatoren
    verwendet werden, allerdings dürfen Tabulatoren und Leerzeichen in Bezug
    auf die Einrückung des schließenden Bezeichners und die Einrückung des
    Textkörpers (bis zum schließenden Bezeichner) <em>nicht</em>
    miteinander vermischt werden. In jedem dieser Fälle wird ein
    <span class="classname"><a href="class.parseerror.php" class="classname">ParseError</a></span> ausgelöst. Diese
    Whitespace-Einschränkungen wurden aufgenommen, weil die Vermischung von
    Tabulatoren und Leerzeichen für die Einrückung die Lesbarkeit
    beeinträchtigt.
   </p>

   <div class="example" id="example-4">
    <p><strong>Beispiel #4 Unterschiedliche Einrückung für den Bezeichner, der den Textkörper (Leerzeichen) schließt</strong></p>
    <div class="example-contents">
<div class="annotation-non-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">// Der gesamte folgende Code funktioniert nicht.<br /><br />// Unterschiedliche Einrückung für den Bezeichner (Tabulatoren), der den<br />// Textkörper (Leerzeichen) schließt<br /></span><span style="color: #007700">{<br />    echo &lt;&lt;&lt;END<br /></span><span style="color: #DD0000">     a<br /></span><span style="color: #007700">        END;<br />}<br /><br /></span><span style="color: #FF8000">// Vermischung von Leerzeichen und Tabulatoren im Textkörper<br /></span><span style="color: #007700">{<br />    echo &lt;&lt;&lt;END<br /></span><span style="color: #DD0000">        a<br /></span><span style="color: #007700">     END;<br />}<br /><br /></span><span style="color: #FF8000">// Vermischung von Leerzeichen und Tabulatoren in der Endmarkierung<br /></span><span style="color: #007700">{<br />    echo &lt;&lt;&lt;END<br /></span><span style="color: #DD0000">          a<br /></span><span style="color: #007700">         END;<br />}</span></span></code></div>
    </div>

    <div class="example-contents"><p>Das oben gezeigte Beispiel erzeugt mit PHP 7.3 folgende Ausgabe:</p></div>
    <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
Parse error: Invalid indentation - tabs and spaces cannot be mixed in example.php line 8
</pre></div>
    </div>
   </div>

   <p class="simpara">
    Der schließende Bezeichner für den Textkörper muss nicht von einem
    Semikolon oder Zeilenumbruch gefolgt werden. Zum Beispiel ist der folgende
    Code ist ab PHP 7.3.0 erlaubt:
   </p>

   <div class="example" id="example-5">
    <p><strong>Beispiel #5 Fortsetzen eines Ausdrucks nach einem schließenden Bezeichner</strong></p>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$values </span><span style="color: #007700">= [&lt;&lt;&lt;END<br /></span><span style="color: #DD0000">a<br />  b<br />    c<br /></span><span style="color: #007700">END, </span><span style="color: #DD0000">'d e f'</span><span style="color: #007700">];<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$values</span><span style="color: #007700">);</span></span></code></div>
    </div>

    <div class="example-contents"><p>Das oben gezeigte Beispiel erzeugt mit PHP 7.3 folgende Ausgabe:</p></div>
    <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
array(2) {
  [0] =&gt;
  string(11) &quot;a
  b
    c&quot;
  [1] =&gt;
  string(5) &quot;d e f&quot;
}
</pre></div>
    </div>
   </div>

   <div class="warning"><strong class="warning">Warnung</strong>
    <p class="simpara">
     Wenn der schließende Bezeichner am Anfang einer Zeile gefunden wurde,
     dann kann er unabhängig davon, ob er Teil eines anderen Wortes war, als
     schließender Bezeichner betrachtet werden und führt zu einem
     <span class="classname"><a href="class.parseerror.php" class="classname">ParseError</a></span>.
    </p>

    <div class="example" id="example-6">
     <p><strong>Beispiel #6 Ein schließender Bezeichner im Textkörper der Zeichenkette führt zu einem ParseError</strong></p>
     <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$values </span><span style="color: #007700">= [&lt;&lt;&lt;END<br /></span><span style="color: #DD0000">a<br />b<br /></span><span style="color: #007700">END </span><span style="color: #0000BB">ING<br />END</span><span style="color: #007700">, </span><span style="color: #DD0000">'d e f'</span><span style="color: #007700">];</span></span></code></div>
     </div>

     <div class="example-contents"><p>Das oben gezeigte Beispiel erzeugt mit PHP 7.3 folgende Ausgabe:</p></div>
    <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
Parse error: syntax error, unexpected identifier &quot;ING&quot;, expecting &quot;]&quot; in example.php on line 5
</pre></div>
     </div>
    </div>

    <p class="simpara">
     Um dieses Problem zu vermeiden, ist es ratsam, die einfache Regel zu
     befolgen: <em>keines der im Textkörper vorkommenden Wörter als
     schließenden Bezeichner wählen</em>.
    </p>

   </div>

   <div class="warning"><strong class="warning">Warnung</strong>
    <p class="simpara">
     Vor PHP 7.3.0 ist es sehr wichtig, darauf zu achten, dass die Zeile mit
     dem schließenden Bezeichner keine anderen Zeichen außer einem Semikolon
     (<code class="literal">;</code>) enthalten darf. Das heißt insbesondere auch, dass
     der Bezeichner nicht <em>eingerückt werden darf</em> und dass
     es vor oder nach dem Semikolon auch keine Leerzeichen oder Tabulatoren
     geben darf. Zudem muss das erste Zeichen vor dem schließenden Bezeichner
     ein Zeilenumbruch sein, so wie er vom Betriebssystem definiert wird. In
     UNIX-Systemen, inlusive macOS, ist dies <code class="literal">\n</code>. Auf den
     schließenden Bezeichner muss ebenfalls ein Zeilenumbruch folgen.
    </p>

    <p class="simpara">
     Wenn diese Regel gebrochen wird und der schließende Bezeichner nicht
     valide ist, wird er nicht als Bezeichner angenommen und PHP wird weiter
     nach einem solchen schließenden Bezeichner suchen. Wird kein gültiger
     schließender Bezeichner vor dem Dateiende gefunden, gibt PHP einen auf
     die letzte Zeile der Datei weisenden Parser-Fehler aus.
    </p>

    <div class="example" id="example-7">
     <p><strong>Beispiel #7 Ungültiges Beispiel vor PHP 7.3.0</strong></p>
     <div class="example-contents">
      
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">class </span><span style="color: #0000BB">foo </span><span style="color: #007700">{<br />    public </span><span style="color: #0000BB">$bar </span><span style="color: #007700">= &lt;&lt;&lt;EOT<br /></span><span style="color: #DD0000">bar<br /></span><span style="color: #007700">    EOT;<br />}<br /></span><span style="color: #FF8000">// Identifier must not be indented<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
    <div class="example" id="example-8">
     <p><strong>Beispiel #8 Gültiges Beispiel, auch vor PHP 7.3.0</strong></p>
     <div class="example-contents">
      
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">class </span><span style="color: #0000BB">foo </span><span style="color: #007700">{<br />    public </span><span style="color: #0000BB">$bar </span><span style="color: #007700">= &lt;&lt;&lt;EOT<br /></span><span style="color: #DD0000">bar<br /></span><span style="color: #007700">EOT;<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>

    <p class="para">
     Heredocs, die Variablen enthalten, können nicht für die Initialisierung
     von Klasseneigenschaften verwendet werden.
    </p>

   </div>

   <p class="para">
    Heredoc-Text verhält sich genau wie ein <span class="type"><a href="language.types.string.php" class="type String">String</a></span> in doppelten
    Anführungsstrichen, ohne die doppelten Anführungszeichen. Das bedeutet,
    dass Anführungszeichen in einem Heredoc nicht maskiert werden müssen, aber
    die oben aufgeführten Maskierungscodes können trotzdem verwendet werden.
    Variablen werden aufgelöst, aber wenn komplexe Variablen innerhalb eines
    Heredocs verwendet werden, ist die gleiche Vorsicht geboten wie bei
    <span class="type"><a href="language.types.string.php" class="type String">String</a></span>s.
   </p>

   <div class="example" id="example-9">
    <p><strong>Beispiel #9 Beispiel für das Notieren von Heredoc-Strings</strong></p>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$str </span><span style="color: #007700">= &lt;&lt;&lt;EOD<br /></span><span style="color: #DD0000">Ein Beispiel für einen String, der sich<br />unter Verwendung der heredoc-Syntax<br />über mehrere Zeilen erstreckt.<br /></span><span style="color: #007700">EOD;<br /><br /></span><span style="color: #FF8000">/* Ein komplexeres Beispiel mit Variablen. */<br /></span><span style="color: #007700">class </span><span style="color: #0000BB">foo<br /></span><span style="color: #007700">{<br />    var </span><span style="color: #0000BB">$foo</span><span style="color: #007700">;<br />    var </span><span style="color: #0000BB">$bar</span><span style="color: #007700">;<br /><br />    function </span><span style="color: #0000BB">__construct</span><span style="color: #007700">()<br />    {<br />        </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">foo </span><span style="color: #007700">= </span><span style="color: #DD0000">'Foo'</span><span style="color: #007700">;<br />        </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">bar </span><span style="color: #007700">= array(</span><span style="color: #DD0000">'Bar1'</span><span style="color: #007700">, </span><span style="color: #DD0000">'Bar2'</span><span style="color: #007700">, </span><span style="color: #DD0000">'Bar3'</span><span style="color: #007700">);<br />    }<br />}<br /><br /></span><span style="color: #0000BB">$foo </span><span style="color: #007700">= new </span><span style="color: #0000BB">foo</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">$name </span><span style="color: #007700">= </span><span style="color: #DD0000">'MeinName'</span><span style="color: #007700">;<br /><br />echo &lt;&lt;&lt;EOT<br /></span><span style="color: #DD0000">Mein Name ist "</span><span style="color: #0000BB">$name</span><span style="color: #DD0000">". Ich gebe etwas </span><span style="color: #0000BB">$foo</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">foo</span><span style="color: #DD0000"> aus.<br />Jetzt gebe ich etwas </span><span style="color: #007700">{</span><span style="color: #0000BB">$foo</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">bar</span><span style="color: #007700">[</span><span style="color: #0000BB">1</span><span style="color: #007700">]}</span><span style="color: #DD0000"> aus.<br />Dies sollte ein großes 'A' ausgeben: \x41<br /></span><span style="color: #007700">EOT;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

    <div class="example-contents"><p>Das oben gezeigte Beispiel erzeugt folgende Ausgabe:</p></div>
    <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
Mein Name ist &quot;MeinName&quot;. Ich gebe etwas Foo aus.
Jetzt gebe ich etwas Bar2 aus.
Dies sollte ein großes &#039;A&#039; ausgeben: A</pre></div>
    </div>
   </div>

   <p class="para">
    Es ist auch möglich, die Heredoc-Syntax zu verwenden, um Daten an
    Funktionsargumente zu übergeben:
   </p>

   <div class="example" id="example-10">
    <p><strong>Beispiel #10 Beispiel für Heredoc in Argumenten</strong></p>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />var_dump</span><span style="color: #007700">(array(&lt;&lt;&lt;EOD<br /></span><span style="color: #DD0000">foobar!<br /></span><span style="color: #007700">EOD<br />));<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>

   <p class="para">
    Es ist möglich, statische Variablen und Klasseneigenschaften/Konstanten
    mit Hilfe der Heredoc-Syntax zu initialisieren:
   </p>

   <div class="example" id="example-11">
    <p><strong>Beispiel #11 Verwendung von Heredoc zur Initialisierung von statischen Werten</strong></p>
    <div class="example-contents">
<div class="annotation-non-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">// Statische Variablen<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">foo</span><span style="color: #007700">()<br />{<br />    static </span><span style="color: #0000BB">$bar </span><span style="color: #007700">= &lt;&lt;&lt;LABEL<br /></span><span style="color: #DD0000">Hier steht nichts drin...<br /></span><span style="color: #007700">LABEL;<br />}<br /><br /></span><span style="color: #FF8000">// Klasseneigenschaften/Konstanten<br /></span><span style="color: #007700">class </span><span style="color: #0000BB">foo<br /></span><span style="color: #007700">{<br />    const </span><span style="color: #0000BB">BAR </span><span style="color: #007700">= &lt;&lt;&lt;FOOBAR<br /></span><span style="color: #DD0000">Beispiel für eine Konstante<br /></span><span style="color: #007700">FOOBAR;<br /><br />    public </span><span style="color: #0000BB">$baz </span><span style="color: #007700">= &lt;&lt;&lt;FOOBAR<br /></span><span style="color: #DD0000">Beispiel für eine Eigenschaft<br /></span><span style="color: #007700">FOOBAR;<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>

   <p class="para">
    Der öffnende Heredoc-Bezeichner kann optional in doppelte
    Anführungszeichen gesetzt werden:
   </p>

   <div class="example" id="example-12">
    <p><strong>Beispiel #12 Verwendung von doppelten Anführungszeichen in Heredoc</strong></p>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">echo &lt;&lt;&lt;"FOOBAR"<br /></span><span style="color: #DD0000">Hallo Welt!<br /></span><span style="color: #007700">FOOBAR;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>

  </div>

  <div class="sect3" id="language.types.string.syntax.nowdoc">
   <h4 class="title">Nowdoc</h4>

   <p class="para">
    Nowdocs sind für Strings in einfachen Anführungszeichen das, was Heredocs
    für Strings in doppelten Anführungszeichen sind. Ein Nowdoc wird ähnlich
    wie ein Heredoc angegeben, aber innerhalb eines Nowdocs wird
    <em>keine String-Interpolation</em> durchgeführt. Das Konstrukt
    ist ideal für die Einbettung von PHP-Code oder anderen großen Textblöcken
    ohne maskieren zu müssen. Es hat einige Eigenschaften mit dem
    <code class="literal">&lt;![CDATA[ ]]&gt;</code>-Konstrukt in SGML gemeinsam, indem
    es einen Textblock deklariert, der nicht geparst werden soll.
   </p>

   <p class="para">
    Ein Nowdoc wird mit der gleichen <code class="literal">&lt;&lt;&lt;</code>-Sequenz
    identifiziert, die für Heredocs verwendet wird, aber der nachfolgende
    Bezeichner wird in einfachen Anführungszeichen eingeschlossen, z. B.
    <code class="literal">&lt;&lt;&lt;&#039;EOT&#039;</code>. Alle Regeln für Heredoc-Bezeichner
    gelten auch für Nowdoc-Bezeichner, insbesondere die hinsichtlich des
    Aussehens des schließenden Bezeichners.
   </p>

   <div class="example" id="example-13">
    <p><strong>Beispiel #13 Nowdoc-Beispiel für das Notieren von Strings</strong></p>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">echo &lt;&lt;&lt;'EOD'<br /></span><span style="color: #DD0000">Ein Beispiel für einen String, der sich über mehrere Zeilen erstreckt<br />unter Verwendung der Nowdoc-Syntax. Backslashes werden immer als<br />Buchstaben behandelt,<br />z. B. \\ und \'.<br /></span><span style="color: #007700">EOD;</span></span></code></div>
    </div>

    <div class="example-contents"><p>Das oben gezeigte Beispiel erzeugt folgende Ausgabe:</p></div>
    <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
Ein Beispiel für einen String, der sich über mehrere Zeilen erstreckt
unter Verwendung der Nowdoc-Syntax. Backslashes werden immer als
Buchstaben behandelt,
z. B. \\ und \&#039;.
</pre></div>
    </div>
   </div>

   <div class="example" id="example-14">
    <p><strong>Beispiel #14 Nowdoc Beispiel für Strings mit Variablen</strong></p>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">class </span><span style="color: #0000BB">foo<br /></span><span style="color: #007700">{<br />    public </span><span style="color: #0000BB">$foo</span><span style="color: #007700">;<br />    public </span><span style="color: #0000BB">$bar</span><span style="color: #007700">;<br /><br />    function </span><span style="color: #0000BB">__construct</span><span style="color: #007700">()<br />    {<br />        </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">foo </span><span style="color: #007700">= </span><span style="color: #DD0000">'Foo'</span><span style="color: #007700">;<br />        </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">bar </span><span style="color: #007700">= array(</span><span style="color: #DD0000">'Bar1'</span><span style="color: #007700">, </span><span style="color: #DD0000">'Bar2'</span><span style="color: #007700">, </span><span style="color: #DD0000">'Bar3'</span><span style="color: #007700">);<br />    }<br />}<br /><br /></span><span style="color: #0000BB">$foo </span><span style="color: #007700">= new </span><span style="color: #0000BB">foo</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">$name </span><span style="color: #007700">= </span><span style="color: #DD0000">'MeinName'</span><span style="color: #007700">;<br /><br />echo &lt;&lt;&lt;'EOT'<br /></span><span style="color: #DD0000">Mein Name ist "$name". Ich gebe etwas $foo-&gt;foo aus.<br />Jetzt gebe ich etwas {$foo-&gt;bar[1]} aus.<br />Dies sollte ein großes 'A' ausgeben: \x41<br /></span><span style="color: #007700">EOT;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

    <div class="example-contents"><p>Das oben gezeigte Beispiel erzeugt folgende Ausgabe:</p></div>
    <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
Mein Name ist &quot;$name&quot;. Ich gebe etwas $foo-&gt;foo aus.
Jetzt gebe ich etwas {$foo-&gt;bar[1]} aus.
Dies sollte ein großes &#039;A&#039; ausgeben: \x41</pre></div>
    </div>
   </div>

   <div class="example" id="example-15">
    <p><strong>Beispiel #15 Beispiel für statische Daten</strong></p>
    <div class="example-contents">
<div class="annotation-non-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">class </span><span style="color: #0000BB">foo </span><span style="color: #007700">{<br />    public </span><span style="color: #0000BB">$bar </span><span style="color: #007700">= &lt;&lt;&lt;'EOT'<br /></span><span style="color: #DD0000">bar<br /></span><span style="color: #007700">EOT;<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>

  </div>

  <div class="sect3" id="language.types.string.parsing">
   <h4 class="title">String-Interpolation</h4>

   <p class="simpara">
    Wenn ein <span class="type"><a href="language.types.string.php" class="type string">string</a></span> in doppelten Anführungszeichen oder mit
    Heredoc angegeben wird, können die
    <a href="language.variables.php" class="link">Variablen</a> darin ersetzt werden.
   </p>

   <p class="simpara">
    Es gibt zwei Arten von Syntax: eine
    <a href="language.types.string.php#language.types.string.parsing.basic" class="link">einfache</a> und eine
    <a href="language.types.string.php#language.types.string.parsing.advanced" class="link">erweiterte</a>.
    Die einfache Syntax ist die gebräuchlichste und bequemste. Sie bietet eine
    Möglichkeit, eine Variable, einen <span class="type"><a href="language.types.array.php" class="link">Array</a></span>-Wert oder eine
    <span class="type"><a href="language.types.object.php" class="link">Objekt</a></span>-Eigenschaft mit minimalem Aufwand in einen
    <span class="type"><a href="language.types.string.php" class="type String">String</a></span> einzubetten.
   </p>

   <p class="simpara">
    Die komplexe Syntax erkennt man an den geschweifte Klammern, die den
    Ausdruck umgeben.
   </p>

   <div class="sect4" id="language.types.string.parsing.basic">
    <h5 class="title">Einfache Syntax</h5>
    <p class="simpara">
     Wenn ein Dollarzeichen (<code class="literal">$</code>) erkannt wird, werden die
     darauf folgenden Zeichen, die in einem Variablennamen verwendet werden
     können, als solche interpretiert und ersetzt.
    </p>
    <div class="example" id="example-16">
     <p><strong>Beispiel #16 String-Interpolation</strong></p>
     <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$juice </span><span style="color: #007700">= </span><span style="color: #DD0000">"apple"</span><span style="color: #007700">;<br /><br />echo </span><span style="color: #DD0000">"He drank some </span><span style="color: #0000BB">$juice</span><span style="color: #DD0000"> juice." </span><span style="color: #007700">. </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

     <div class="example-contents"><p>Das oben gezeigte Beispiel erzeugt folgende Ausgabe:</p></div>
     <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
He drank some apple juice.
</pre></div>
     </div>
    </div>

    <p class="simpara">
     Formal ist die Struktur für die grundlegende Syntax der Ersetzung von
     Variablen wie folgt:
    </p>
    <div class="informalexample">
     <div class="example-contents">
<div class="annotation-interactive cdata"><pre>
String-Variable::
     Variablen-Name   (Offset-oder-Eigenschaft)?
   | ${   Ausdruck   }

Offset-oder-Eigenschaft::
     Offset-im-String
   | Eigenschaft-im-String

Offset-im-String::
     [   Name    ]
   | [   Variablen-Name   ]
   | [   Ganzzahl-Literal   ]

Eigenschaft-im-String::
     -&gt;  Name

Variablen-Name::
     $   Name

Name::
     [a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*

</pre></div>
     </div>

    </div>

    <div class="warning"><strong class="warning">Warnung</strong>
     <p class="para">
      Die Syntax <code class="literal">${ expression }</code> ist seit PHP 8.2.0
      veraltet, da sie als
      <a href="language.variables.variable.php" class="link">variable Variable</a>
      interpretiert werden kann:
      <div class="informalexample">
       <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">const </span><span style="color: #0000BB">foo </span><span style="color: #007700">= </span><span style="color: #DD0000">'bar'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$foo </span><span style="color: #007700">= </span><span style="color: #DD0000">'foo'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$bar </span><span style="color: #007700">= </span><span style="color: #DD0000">'bar'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #DD0000">"</span><span style="color: #007700">${</span><span style="color: #0000BB">foo</span><span style="color: #007700">}</span><span style="color: #DD0000">"</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #DD0000">"</span><span style="color: #007700">${(</span><span style="color: #0000BB">foo</span><span style="color: #007700">)}</span><span style="color: #DD0000">"</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
       </div>

       <p class="para">Das oben gezeigte Beispiel erzeugt mit PHP 8.2 folgende Ausgabe:</p>
       <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
Deprecated: Using ${var} in strings is deprecated, use {$var} instead in file on line 6

Deprecated: Using ${expr} (variable variables) in strings is deprecated, use {${expr}} instead in file on line 9
string(3) &quot;foo&quot;
string(3) &quot;bar&quot;
</pre></div>
       </div>
       <p class="para">Das oben gezeigte Beispiel erzeugt folgende Ausgabe:</p>
       <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
string(3) &quot;foo&quot;
string(3) &quot;bar&quot;
</pre></div>
       </div>
      </div>
      Stattdessen sollte die
      <a href="language.types.string.php#language.types.string.parsing.advanced" class="link">erweiterte</a>
      Syntax der String-Interpolation verwendet werden.
     </p>
    </div>

    <blockquote class="note"><p><strong class="note">Hinweis</strong>: 
     <span class="simpara">
      Wenn es nicht möglich ist, einen gültigen Namen zu bilden, bleibt das
      Dollarzeichen unverändert im String erhalten:
     </span>
     <div class="informalexample">
      <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"Für $ wurde keine Interpolation durchgeführt\n"</span><span style="color: #007700">;<br />echo </span><span style="color: #DD0000">"Für $\n wurde keine Interpolation durchgeführt\n"</span><span style="color: #007700">;<br />echo </span><span style="color: #DD0000">"Für $2 wurde keine Interpolation durchgeführt\n"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
      </div>

      <p class="para">Das oben gezeigte Beispiel erzeugt folgende Ausgabe:</p>
      <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
Für $ wurde keine Interpolation durchgeführt
Für $
 wurde keine Interpolation durchgeführt
Für $2 wurde keine Interpolation durchgeführt
</pre></div>
      </div>
     </div>
    </p></blockquote>

    <div class="example" id="example-17">
     <p><strong>Beispiel #17 Interpolieren des Wertes der ersten Dimension eines Arrays oder einer Eigenschaft</strong></p>
     <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$juices </span><span style="color: #007700">= array(</span><span style="color: #DD0000">"apple"</span><span style="color: #007700">, </span><span style="color: #DD0000">"orange"</span><span style="color: #007700">, </span><span style="color: #DD0000">"string_key" </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">"purple"</span><span style="color: #007700">);<br /><br />echo </span><span style="color: #DD0000">"He drank some </span><span style="color: #0000BB">$juices</span><span style="color: #007700">[</span><span style="color: #0000BB">0</span><span style="color: #007700">]</span><span style="color: #DD0000"> juice."</span><span style="color: #007700">;<br />echo </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br />echo </span><span style="color: #DD0000">"He drank some </span><span style="color: #0000BB">$juices</span><span style="color: #007700">[</span><span style="color: #0000BB">1</span><span style="color: #007700">]</span><span style="color: #DD0000"> juice."</span><span style="color: #007700">;<br />echo </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br />echo </span><span style="color: #DD0000">"He drank some </span><span style="color: #0000BB">$juices</span><span style="color: #007700">[</span><span style="color: #0000BB">string_key</span><span style="color: #007700">]</span><span style="color: #DD0000"> juice."</span><span style="color: #007700">;<br />echo </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /><br />class </span><span style="color: #0000BB">A </span><span style="color: #007700">{<br />    public </span><span style="color: #0000BB">$s </span><span style="color: #007700">= </span><span style="color: #DD0000">"string"</span><span style="color: #007700">;<br />}<br /><br /></span><span style="color: #0000BB">$o </span><span style="color: #007700">= new </span><span style="color: #0000BB">A</span><span style="color: #007700">();<br /><br />echo </span><span style="color: #DD0000">"Wert des Objekts: </span><span style="color: #0000BB">$o</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">s</span><span style="color: #DD0000">."</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

     <div class="example-contents"><p>Das oben gezeigte Beispiel erzeugt folgende Ausgabe:</p></div>
     <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
He drank some apple juice.
He drank some orange juice.
He drank some purple juice.
Wert des Objekts: string.
</pre></div>
     </div>
    </div>

    <blockquote class="note"><p><strong class="note">Hinweis</strong>: 
     <span class="simpara">
      Der Array-Schlüssel muss nicht in Anführungszeichen gesetzt werden, daher
      ist es nicht möglich, mit der einfachen Syntax auf eine Konstante als
      Schlüssel zu verweisen. Verwenden Sie stattdessen die
      <a href="language.types.string.php#language.types.string.parsing.advanced" class="link">erweiterte</a>
      Syntax.
     </span>
    </p></blockquote>

    <p class="simpara">
     Seit PHP 7.1.0 werden auch <em>negative</em> numerische
     Indizes unterstützt.
    </p>

    <div class="example" id="example-18">
     <p><strong>Beispiel #18 Negative numerische Indizes</strong></p>
     <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$string </span><span style="color: #007700">= </span><span style="color: #DD0000">'string'</span><span style="color: #007700">;<br />echo </span><span style="color: #DD0000">"Das Zeichen an Index -2 ist </span><span style="color: #0000BB">$string</span><span style="color: #007700">[-</span><span style="color: #0000BB">2</span><span style="color: #007700">]</span><span style="color: #DD0000">."</span><span style="color: #007700">, </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$string</span><span style="color: #007700">[-</span><span style="color: #0000BB">3</span><span style="color: #007700">] = </span><span style="color: #DD0000">'o'</span><span style="color: #007700">;<br />echo </span><span style="color: #DD0000">"Die Änderung des Zeichens an Index -3 auf o ergibt </span><span style="color: #0000BB">$string</span><span style="color: #DD0000">."</span><span style="color: #007700">, </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

     <div class="example-contents"><p>Das oben gezeigte Beispiel erzeugt folgende Ausgabe:</p></div>
     <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
Das Zeichen an Index -2 ist n.
Die Änderung des Zeichens an Index -3 auf o ergibt strong.
</pre></div>
     </div>
    </div>

    <p class="simpara">
     Für alles, das komplexer ist, muss die
     <a href="language.types.string.php#language.types.string.parsing.advanced" class="link">erweiterte</a>
     Syntax verwendet werden.
    </p>
   </div>

   <div class="sect4" id="language.types.string.parsing.advanced">
    <h5 class="title">Erweiterte (geschweifte) Syntax</h5>

    <p class="simpara">
     Die erweiterte Syntax ermöglicht die Interpolation von
     <em>Variablen</em> mit beliebigen Zugriffsmethoden.
    </p>

    <p class="simpara">
     Jede skalare Variable, jedes Array-Element oder jede Objekteigenschaft
     (<span class="modifier">static</span> oder nicht) mit einer
     <span class="type"><a href="language.types.string.php" class="type String">String</a></span>-Darstellung kann über diese Syntax eingebunden werden.
     Der Ausdruck wird so geschrieben, wie er auch außerhalb des
     <span class="type"><a href="language.types.string.php" class="type String">String</a></span>s erscheinen würde, und dann von <code class="literal">{</code>
     und <code class="literal">}</code> umschlossen. Da <code class="literal">{</code> nicht
     maskiert werden kann, wird diese Syntax nur erkannt werden, wenn das
     <code class="literal">$</code> unmittelbar auf das <code class="literal">{</code> folgt.
     Verwenden Sie <code class="literal">{\$</code>, um ein wörtliches
     <code class="literal">{$</code> zu erhalten. Einige Beispiele, um es zu
     verdeutlichen:
    </p>

    <div class="example" id="example-19">
     <p><strong>Beispiel #19 Syntax mit geschweiften Klammern</strong></p>
     <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">const </span><span style="color: #0000BB">DATA_KEY </span><span style="color: #007700">= </span><span style="color: #DD0000">'const-key'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$great </span><span style="color: #007700">= </span><span style="color: #DD0000">'fantastisch'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$arr </span><span style="color: #007700">= [<br />    </span><span style="color: #DD0000">'1'</span><span style="color: #007700">,<br />    </span><span style="color: #DD0000">'2'</span><span style="color: #007700">,<br />    </span><span style="color: #DD0000">'3'</span><span style="color: #007700">,<br />    [</span><span style="color: #0000BB">41</span><span style="color: #007700">, </span><span style="color: #0000BB">42</span><span style="color: #007700">, </span><span style="color: #0000BB">43</span><span style="color: #007700">],<br />    </span><span style="color: #DD0000">'key' </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'Indexierter Wert'</span><span style="color: #007700">,<br />    </span><span style="color: #DD0000">'const-key' </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'Schlüssel mit Minuszeichen'</span><span style="color: #007700">,<br />    </span><span style="color: #DD0000">'foo' </span><span style="color: #007700">=&gt; [</span><span style="color: #DD0000">'foo1'</span><span style="color: #007700">, </span><span style="color: #DD0000">'foo2'</span><span style="color: #007700">, </span><span style="color: #DD0000">'foo3'</span><span style="color: #007700">]<br />];<br /><br /></span><span style="color: #FF8000">// Funktioniert nicht, Ausgabe: Das ist { fantastisch}<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"Das ist { </span><span style="color: #0000BB">$great</span><span style="color: #DD0000">}"</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// Funktioniert, Ausgabe: Das ist fantastisch<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"Das ist </span><span style="color: #007700">{</span><span style="color: #0000BB">$great</span><span style="color: #007700">}</span><span style="color: #DD0000">"</span><span style="color: #007700">;<br /><br />class </span><span style="color: #0000BB">Square </span><span style="color: #007700">{<br />    public </span><span style="color: #0000BB">$width</span><span style="color: #007700">;<br /><br />    public function </span><span style="color: #0000BB">__construct</span><span style="color: #007700">(</span><span style="color: #0000BB">int $width</span><span style="color: #007700">) { </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">width </span><span style="color: #007700">= </span><span style="color: #0000BB">$width</span><span style="color: #007700">; }<br />}<br /><br /></span><span style="color: #0000BB">$square </span><span style="color: #007700">= new </span><span style="color: #0000BB">Square</span><span style="color: #007700">(</span><span style="color: #0000BB">5</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// Funktioniert<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"Dieses Quadrat ist </span><span style="color: #007700">{</span><span style="color: #0000BB">$square</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">width</span><span style="color: #007700">}</span><span style="color: #DD0000">00 Zentimeter breit."</span><span style="color: #007700">;<br /><br /><br /></span><span style="color: #FF8000">// Funktioniert, Anführungszeichen funktionieren nur mit der<br />// Syntax der geschweiften Klammer<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"Das funktioniert: </span><span style="color: #007700">{</span><span style="color: #0000BB">$arr</span><span style="color: #007700">[</span><span style="color: #DD0000">'key'</span><span style="color: #007700">]}</span><span style="color: #DD0000">"</span><span style="color: #007700">;<br /><br /><br /></span><span style="color: #FF8000">// Funktioniert<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"Das funktioniert: </span><span style="color: #007700">{</span><span style="color: #0000BB">$arr</span><span style="color: #007700">[</span><span style="color: #0000BB">3</span><span style="color: #007700">][</span><span style="color: #0000BB">2</span><span style="color: #007700">]}</span><span style="color: #DD0000">"</span><span style="color: #007700">;<br /><br />echo </span><span style="color: #DD0000">"Das funktioniert: </span><span style="color: #007700">{</span><span style="color: #0000BB">$arr</span><span style="color: #007700">[</span><span style="color: #0000BB">DATA_KEY</span><span style="color: #007700">]}</span><span style="color: #DD0000">"</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// Verwenden Sie bei mehrdimensionalen Arrays immer geschweifte Klammern<br />// um die Arrays, wenn diese innerhalb von Strings stehen<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"Das funktioniert: </span><span style="color: #007700">{</span><span style="color: #0000BB">$arr</span><span style="color: #007700">[</span><span style="color: #DD0000">'foo'</span><span style="color: #007700">][</span><span style="color: #0000BB">2</span><span style="color: #007700">]}</span><span style="color: #DD0000">"</span><span style="color: #007700">;<br /><br />echo </span><span style="color: #DD0000">"Das funktioniert: </span><span style="color: #007700">{</span><span style="color: #0000BB">$obj</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">values</span><span style="color: #007700">[</span><span style="color: #0000BB">3</span><span style="color: #007700">]-&gt;</span><span style="color: #0000BB">name</span><span style="color: #007700">}</span><span style="color: #DD0000">"</span><span style="color: #007700">;<br /><br />echo </span><span style="color: #DD0000">"Das funktioniert: </span><span style="color: #007700">{</span><span style="color: #0000BB">$obj</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">$staticProp</span><span style="color: #007700">}</span><span style="color: #DD0000">"</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// Funktioniert nicht, Ausgabe: C:\directory\{fantastisch}.txt<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"C:\directory\{</span><span style="color: #0000BB">$great</span><span style="color: #DD0000">}.txt"</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// Funktioniert, Ausgabe: C:\folder\fantastisch.txt<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"C:\\directory\\</span><span style="color: #007700">{</span><span style="color: #0000BB">$great</span><span style="color: #007700">}</span><span style="color: #DD0000">.txt"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>

    <blockquote class="note"><p><strong class="note">Hinweis</strong>: 
     <span class="simpara">
      Da diese Syntax beliebige Ausdrücke erlaubt, ist es möglich,
      <a href="language.variables.variable.php" class="link">variable Variablen</a>
      innerhalb der erweiterten Syntax zu verwenden.
     </span>
    </p></blockquote>
   </div>
  </div>

  <div class="sect3" id="language.types.string.substr">
   <h4 class="title">Zugriff auf Strings und Änderung von Zeichen</h4>

   <p class="para">
    Auf ein Zeichen in einem <span class="type"><a href="language.types.string.php" class="type String">String</a></span> kann zugegriffen und es kann
    geändert werden, indem seine Position (von 0 an) hinter dem
    <span class="type"><a href="language.types.string.php" class="type String">String</a></span> mit Hilfe von <span class="type"><a href="language.types.array.php" class="link">Array</a></span>-Klammern angegeben
    wird, z. B. <var class="varname">$str[42]</var>. In diesem Fall ist es hilfreich,
    sich einen <span class="type"><a href="language.types.string.php" class="type String">String</a></span> als ein <span class="type"><a href="language.types.array.php" class="link">Array</a></span> von Zeichen
    vorzustellen. Die Funktionen <span class="function"><a href="function.substr.php" class="function">substr()</a></span> und
    <span class="function"><a href="function.substr-replace.php" class="function">substr_replace()</a></span> können verwendet werden, wenn mehr als
    ein Zeichen extrahiert oder ersetzt werden soll.
   </p>

   <blockquote class="note"><p><strong class="note">Hinweis</strong>: 
    <span class="simpara">
     Seit PHP 7.1.0 werden auch negative String-Offsets unterstützt. Diese
     geben den Offset vom Ende des Strings an. Früher verursachten negative
     Offsets beim Lesen eine <strong><code><a href="errorfunc.constants.php#constant.e-notice">E_NOTICE</a></code></strong>-Meldung aus (was
     einen leeren String ergibt) und beim Schreiben eine
     <strong><code><a href="errorfunc.constants.php#constant.e-warning">E_WARNING</a></code></strong>-Meldung (was den String unangetastet
     lässt).
    </span>
   </p></blockquote>

   <blockquote class="note"><p><strong class="note">Hinweis</strong>: 
    <span class="simpara">
     Vor PHP 8.0.0 konnte für den gleichen Zweck auch mit Klammern auf
     <span class="type"><a href="language.types.string.php" class="type String">String</a></span>s zugegriffen werden, wie in
     <var class="varname">$str{42}</var>. Diese Syntax mit geschweiften Klammern ist
     seit PHP 7.4.0 veraltet und wird seit PHP 8.0.0 nicht mehr unterstützt.
    </span>
   </p></blockquote>

   <div class="warning"><strong class="warning">Warnung</strong>
    <p class="simpara">
     Das Schreiben an einen Offset außerhalb des vorhandenen Bereichs bewirkt,
     dass der String bis zu dieser Position mit Leerzeichen aufgefüllt wird.
     Nicht-ganzzahlige Offsets werden in einen ganzzahligen Wert umgewandelt.
     Bei ungültigen Offset-Typen wird eine <strong><code><a href="errorfunc.constants.php#constant.e-warning">E_WARNING</a></code></strong>
     ausgegeben. Nur das erste Zeichen eines zugewiesenen Strings wird
     verwendet. Seit PHP 7.1.0 führt die Zuweisung eines leeren Strings zu
     einem schwerwiegenden Fehler. Vorher wurde ein NULL-Byte zugewiesen.
    </p>
   </div>

   <div class="warning"><strong class="warning">Warnung</strong>
    <p class="simpara">
     Intern sind PHP-Strings Byte-Arrays. Folglich ist der Zugriff auf einen
     String oder dessen Änderung mit Array-Klammern nicht Multi-Byte-sicher
     und sollte nur mit Strings erfolgen, die in einer Ein-Byte-Kodierung wie
     ISO-8859-1 vorliegen.
    </p>
   </div>

   <blockquote class="note"><p><strong class="note">Hinweis</strong>: 
    <span class="simpara">
     Seit PHP 7.1.0 führt die Anwendung des leeren Indexoperators auf einen
     leeren String zu einem fatalen Fehler. Zuvor wurde der leere String
     stillschweigend in ein Array umgewandelt.
    </span>
   </p></blockquote>

   <div class="example" id="example-20">
    <p><strong>Beispiel #20 Einige String-Beispiele</strong></p>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">// Ermitteln des ersten Zeichens eines Strings.<br /></span><span style="color: #0000BB">$str </span><span style="color: #007700">= </span><span style="color: #DD0000">'Das ist ein Test.'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$first </span><span style="color: #007700">= </span><span style="color: #0000BB">$str</span><span style="color: #007700">[</span><span style="color: #0000BB">0</span><span style="color: #007700">];<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$first</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// Ermitteln des dritten Zeichens eines Strings.<br /></span><span style="color: #0000BB">$third </span><span style="color: #007700">= </span><span style="color: #0000BB">$str</span><span style="color: #007700">[</span><span style="color: #0000BB">2</span><span style="color: #007700">];<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$third</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// Ermitteln das letzten Zeichens eines Strings.<br /></span><span style="color: #0000BB">$str </span><span style="color: #007700">= </span><span style="color: #DD0000">'Das ist immer noch ein Test.'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$last </span><span style="color: #007700">= </span><span style="color: #0000BB">$str</span><span style="color: #007700">[</span><span style="color: #0000BB">strlen</span><span style="color: #007700">(</span><span style="color: #0000BB">$str</span><span style="color: #007700">)-</span><span style="color: #0000BB">1</span><span style="color: #007700">];<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$last</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// Ändern des letzten Zeichens eines Strings.<br /></span><span style="color: #0000BB">$str </span><span style="color: #007700">= </span><span style="color: #DD0000">'Look at the sea'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$str</span><span style="color: #007700">[</span><span style="color: #0000BB">strlen</span><span style="color: #007700">(</span><span style="color: #0000BB">$str</span><span style="color: #007700">)-</span><span style="color: #0000BB">1</span><span style="color: #007700">] = </span><span style="color: #DD0000">'e'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$str</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>

   <p class="para">
    String-Offsets müssen entweder Integer oder Integer-ähnliche Strings sein,
    andernfalls wird eine Warnung ausgelöst.
   </p>

   <div class="example" id="example-21">
    <p><strong>Beispiel #21 Beispiel für unzulässige String-Offsets</strong></p>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$str </span><span style="color: #007700">= </span><span style="color: #DD0000">'abc'</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">$keys </span><span style="color: #007700">= [ </span><span style="color: #DD0000">'1'</span><span style="color: #007700">, </span><span style="color: #DD0000">'1.0'</span><span style="color: #007700">, </span><span style="color: #DD0000">'x'</span><span style="color: #007700">, </span><span style="color: #DD0000">'1x' </span><span style="color: #007700">];<br /><br />foreach (</span><span style="color: #0000BB">$keys </span><span style="color: #007700">as </span><span style="color: #0000BB">$keyToTry</span><span style="color: #007700">) {<br />    </span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(isset(</span><span style="color: #0000BB">$str</span><span style="color: #007700">[</span><span style="color: #0000BB">$keyToTry</span><span style="color: #007700">]));<br /><br />    try {<br />        </span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$str</span><span style="color: #007700">[</span><span style="color: #0000BB">$keyToTry</span><span style="color: #007700">]);<br />    } catch (</span><span style="color: #0000BB">TypeError $e</span><span style="color: #007700">) {<br />        echo </span><span style="color: #0000BB">$e</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">getMessage</span><span style="color: #007700">(), </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br />    }<br /><br />    echo </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

    <div class="example-contents"><p>Das oben gezeigte Beispiel erzeugt folgende Ausgabe:</p></div>
    <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
bool(true)
string(1) &quot;b&quot;

bool(false)
Cannot access offset of type string on string

bool(false)
Cannot access offset of type string on string

bool(false)

Warning: Illegal string offset &quot;1x&quot; in Standard input code on line 10
string(1) &quot;b&quot;
</pre></div>
    </div>
   </div>

   <blockquote class="note"><p><strong class="note">Hinweis</strong>: 
    <p class="para">
     Der Zugriff auf Variablen anderer Typen (ohne Arrays oder Objekte, die
     entsprechende Schnittstellen implementieren) mit <code class="literal">[]</code>
     oder <code class="literal">{}</code> gibt stillschweigend <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> zurück.
    </p>
   </p></blockquote>

   <blockquote class="note"><p><strong class="note">Hinweis</strong>: 
    <p class="para">
     Auf Zeichen innerhalb von String-Literalen kann mit <code class="literal">[]</code>
     oder <code class="literal">{}</code> zugegriffen werden.
    </p>
   </p></blockquote>

   <blockquote class="note"><p><strong class="note">Hinweis</strong>: 
    <p class="para">
     Der Zugriff auf Zeichen innerhalb von String-Literalen mit der
     <code class="literal">{}</code>-Syntax ist seit PHP 7.4 veraltet und wurde in PHP
     8.0 entfernt.
    </p>
   </p></blockquote>
  </div>
 </div>

 <div class="sect2" id="language.types.string.useful-funcs">
  <h3 class="title">Nützliche Funktionen und Operatoren</h3>

  <p class="para">
   <span class="type"><a href="language.types.string.php" class="type String">String</a></span>s können mit dem Punkt-Operator &#039;.&#039; verkettet werden.
   Es ist zu beachten, dass der Additions-Operator &#039;+&#039; in diesem Fall
   <em>nicht</em> funktioniert. Siehe
   <a href="language.operators.string.php" class="link">String-Operatoren</a> für mehr
   Informationen.
  </p>

  <p class="para">
   Es gibt eine Reihe nützlicher Funktionen für die
   <span class="type"><a href="language.types.string.php" class="type String">String</a></span>-Manipulation.
  </p>

  <p class="simpara">
   Siehe den Abschnitt <a href="ref.strings.php" class="link">String-Funktionen</a>
   für allgemeine Funktionen und die
   <a href="ref.pcre.php" class="link">Funktionen für Perl-kompatible reguläre Ausdrücke</a>
   für erweiterte Funktionen zum Suchen und Ersetzen.
  </p>

  <p class="simpara">
   Außerdem gibt es <a href="ref.url.php" class="link">Funktionen für URL-Strings</a>
   und Funktionen zum Verschlüsseln/Entschlüsseln von Strings
   (<a href="ref.sodium.php" class="link">Sodium</a> und
   <a href="ref.hash.php" class="link">Hash</a>).
  </p>

  <p class="simpara">
   Siehe zudem auch die
   <a href="ref.ctype.php" class="link">Zeichentyp-Funktionen</a>.
  </p>
 </div>

 <div class="sect2" id="language.types.string.casting">
  <h3 class="title">Umwandlung in String</h3>

  <p class="para">
   Ein Wert kann mit dem Schlüsselwort <code class="literal">(string)</code> oder der
   Funktion <span class="function"><a href="function.strval.php" class="function">strval()</a></span> in einen <span class="type"><a href="language.types.string.php" class="type String">String</a></span>
   umgewandelt werden. Die Umwandlung in einen <span class="type"><a href="language.types.string.php" class="type String">String</a></span> erfolgt
   automatisch im Kontext eines Ausdrucks, in dem ein <span class="type"><a href="language.types.string.php" class="type String">String</a></span>
   erforderlich ist. Dies geschieht z. B. bei der Verwendung der Funktionen
   <span class="function"><a href="function.echo.php" class="function">echo</a></span> oder <span class="function"><a href="function.print.php" class="function">print</a></span> oder wenn eine
   Variable mit einem <span class="type"><a href="language.types.string.php" class="type String">String</a></span> verglichen wird. In den Abschnitten
   über <a href="language.types.php" class="link">Typen</a> und
   <a href="language.types.type-juggling.php" class="link">Typ-Manipulationen</a>
   werden die folgenden Punkte näher erläutert. Siehe auch die Funktion
   <span class="function"><a href="function.settype.php" class="function">settype()</a></span>.
  </p>

  <p class="para">
   Ein <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span> <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> -Wert wird in den <span class="type"><a href="language.types.string.php" class="type String">String</a></span>
   <code class="literal">&quot;1&quot;</code> umgewandelt. <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span> <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> wird in
   <code class="literal">&quot;&quot;</code> (den leeren String) umgewandelt. Dies ermöglicht es,
   zwischen <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span>- und <span class="type"><a href="language.types.string.php" class="type String">String</a></span>-Werten hin und her zu
   konvertieren.
  </p>

  <p class="para">
   Ein <span class="type"><a href="language.types.integer.php" class="type Int">Int</a></span> oder <span class="type"><a href="language.types.float.php" class="type Float">Float</a></span> wird in einen
   <span class="type"><a href="language.types.string.php" class="type String">String</a></span> umgewandelt, der die Zahl textuell darstellt
   (einschließlich des Exponententeil bei <span class="type"><a href="language.types.float.php" class="type Float">Float</a></span>s).
   Gleitkommazahlen können mit der Exponentialschreibweise umgewandelt werden
   (<code class="literal">4.1E+6</code>).
  </p>

  <blockquote class="note"><p><strong class="note">Hinweis</strong>: 
   <p class="para">
    Seit PHP 8.0.0 ist das Dezimalpunktzeichen immer ein Punkt
    (&quot;<code class="literal">.</code>&quot;). Vor PHP 8.0.0 wird das Dezimalpunktzeichen in
    der Locale des Skripts definiert (Kategorie LC_NUMERIC). Siehe die
    Funktion <span class="function"><a href="function.setlocale.php" class="function">setlocale()</a></span>.
   </p>
  </p></blockquote>

  <p class="para">
   <span class="type"><a href="language.types.array.php" class="link">Array</a></span>s werden immer in
   <span class="type"><a href="language.types.string.php" class="type String">String</a></span>-<code class="literal">&quot;Arrays&quot;</code> umgewandelt; aus diesem
   Grund können <span class="function"><a href="function.echo.php" class="function">echo</a></span> und <span class="function"><a href="function.print.php" class="function">print</a></span> nicht
   von sich aus den Inhalt eines <span class="type"><a href="language.types.array.php" class="link">Array</a></span>s anzeigen. Um ein
   einzelnes Element anzuzeigen, verwendet man eine Konstruktion wie
   <code class="literal">echo $arr[&#039;foo&#039;]</code>. Siehe unten für Tipps zur Anzeige
   des gesamten Inhalts.
  </p>

  <p class="para">
   Um <span class="type"><a href="language.types.object.php" class="link">Objekt</a></span>e in <span class="type"><a href="language.types.string.php" class="type String">String</a></span>s umzuwandeln, muss die
   magische Methode <a href="language.oop5.magic.php" class="link">__toString</a>
   verwendet werden.
  </p>

  <p class="para">
   <span class="type"><a href="language.types.resource.php" class="link">Ressource</a></span>n werden immer mit der Struktur
   <code class="literal">&quot;Resource id #1&quot;</code> in <span class="type"><a href="language.types.string.php" class="type String">String</a></span>s umgewandelt,
   wobei <code class="literal">1</code> die Ressourcennummer ist, die der
   <span class="type"><a href="language.types.resource.php" class="link">Ressource</a></span> von PHP zur Laufzeit zugewiesen wird. Obwohl man
   sich nicht auf die genaue Struktur dieses Strings verlassen sollte und sie
   sich ändern kann, wird sie für eine bestimmte Ressource innerhalb der
   Lebensdauer eines ausgeführten Skripts (d. h. einer Web-Anfrage oder eines
   CLI-Prozesses) immer eindeutig sein und wird nicht wiederverwendet. Um den
   Typ einer <span class="type"><a href="language.types.resource.php" class="link">Ressource</a></span> zu erhalten, kann die Funktion
   <span class="function"><a href="function.get-resource-type.php" class="function">get_resource_type()</a></span> verwendet werden.
  </p>

  <p class="para">
   <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> wird immer in einen leeren String umgewandelt.
  </p>

  <p class="para">
   Wie oben erwähnt, liefert die direkte Umwandlung eines
   <span class="type"><a href="language.types.array.php" class="link">Array</a></span>s, <span class="type"><a href="language.types.object.php" class="link">Objekt</a></span>s oder einer
   <span class="type"><a href="language.types.resource.php" class="link">Ressource</a></span> in einen <span class="type"><a href="language.types.string.php" class="type String">String</a></span> keine nützlichen
   Informationen über den Wert, die über seinen Typ hinausgehen. Um den Inhalt
   dieser Typen zu ermitteln, siehe die Funktionen
   <span class="function"><a href="function.print-r.php" class="function">print_r()</a></span> und <span class="function"><a href="function.var-dump.php" class="function">var_dump()</a></span>.
  </p>

  <p class="para">
   Die meisten PHP-Werte können zur dauerhaften Speicherung auch in
   <span class="type"><a href="language.types.string.php" class="type String">String</a></span>s umgewandelt werden. Diese Methode wird Serialisierung
   genannt und wird von der Funktion <span class="function"><a href="function.serialize.php" class="function">serialize()</a></span>
   durchgeführt.
  </p>

 </div>

 <div class="sect2" id="language.types.string.details">

  <h3 class="title">Details zum String-Typ</h3>

  <p class="para">
   Der Typ <span class="type"><a href="language.types.string.php" class="type string">string</a></span> ist in PHP als ein Array von Bytes und einem
   Integer, der die Länge des Puffers angibt, implementiert. Er hat keine
   Informationen darüber, wie diese Bytes in Zeichen umgewandelt werden; diese
   Aufgabe wird dem Programmierer überlassen. Es gibt keine Beschränkungen für
   die Werte, aus denen der String bestehen kann; insbesondere Insbesondere
   sind Bytes mit dem Wert <code class="literal">0</code> (&quot;NUL-Bytes&quot;) in der
   Zeichenkette erlaubt (allerdings können einige Funktionen, die in diesem
   Handbuch als nicht &quot;binärsicher&quot; eingestuft werden, die Strings an
   Bibliotheken weitergeben, die Daten nach einem NUL-Byte ignorieren).
  </p>
  <p class="para">
   Diese Eigenschaft des String-Typs erklärt, warum es in PHP keinen separaten
   &quot;Byte&quot;-Typ gibt - Strings übernehmen diese Rolle. Funktionen, die keine
   textuellen Daten zurückgeben - zum Beispiel beliebige Daten, die von einem
   Netzwerksocket gelesen werden - geben immer noch Strings zurück.
  </p>
  <p class="para">
   Da PHP keine spezifische Kodierung für Strings vorschreibt, könnte man sich
   fragen, wie String-Literale kodiert werden. Ist zum Beispiel der String
   <code class="literal">&quot;á&quot;</code> äquivalent zu <code class="literal">&quot;\xE1&quot;</code>
   (ISO-8859-1), <code class="literal">&quot;\xC3\xA1&quot;</code> (UTF-8, C-Form),
   <code class="literal">&quot;\x61\xCC\x81&quot;</code> (UTF-8, D-Form) oder zu irgendeiner
   anderen möglichen Darstellung? Die Antwort lautet, dass der String auf die
   Art und Weise kodiert wird, wie er in der Skriptdatei kodiert ist. Wenn das
   Skript also in ISO-8859-1 geschrieben ist, wird die Zeichenkette in
   ISO-8859-1 kodiert und so weiter. Das gilt jedoch nicht, wenn
   Zend-Multibyte aktiviert ist; in diesem Fall kann das Skript in einer
   beliebigen Kodierung geschrieben werden (die explizit deklariert ist oder
   erkannt wird) und dann in eine bestimmte interne Kodierung konvertiert
   werden, welche dann die Kodierung ist, die für die String-Literale
   verwendet wird. Es ist zu beachten, dass es einige Beschränkungen für die
   Kodierung des Skripts gibt (oder für die interne Kodierung gibt, sollte
   Zend-Multibyte aktiviert sein) - das bedeutet fast immer, dass diese
   Kodierung eine kompatible Obermenge von ASCII sein sollte, wie z. B. UTF-8
   oder ISO-8859-1. Es ist jedoch zu beachten, dass zustandsabhängige
   Kodierungen, bei denen dieselben Byte-Werte sowohl im Anfangszustand als
   auch im Nicht-Anfangszustand verwendet werden können, problematisch sein
   können.
  </p>
  <p class="para">
   Um nützlich zu sein, müssen Funktionen, die mit Text arbeiten, natürlich
   Annahmen darüber treffen, wie der String kodiert ist. Leider gibt es in
   diesem Punkt viele Unterschiede zwischen den PHP-Funktionen:
  </p>
  <ul class="itemizedlist">
   <li class="listitem">
    <span class="simpara">
     Einige Funktionen gehen davon aus, dass der String in einer (beliebigen)
     Ein-Byte-Kodierung kodiert ist, aber sie müssen diese Bytes nicht als
     bestimmte Zeichen interpretieren. Dies ist z. B. der Fall bei
     <span class="function"><a href="function.substr.php" class="function">substr()</a></span>, <span class="function"><a href="function.strpos.php" class="function">strpos()</a></span>,
     <span class="function"><a href="function.strlen.php" class="function">strlen()</a></span> oder <span class="function"><a href="function.strcmp.php" class="function">strcmp()</a></span>. Eine andere
     Möglichkeit, sich diese Funktionen vorzustellen, ist, dass sie mit
     Speicherpuffern arbeiten, d. h. sie arbeiten mit Bytes und Byte-Offsets.
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     Anderen Funktionen wird die Kodierung des Strings übergeben, eventuell
     nehmen sie auch einen Standardwert an, wenn keine solche Information
     angegeben wird. Dies ist der Fall bei <span class="function"><a href="function.htmlentities.php" class="function">htmlentities()</a></span>
     und den meisten der Funktionen in der
     <a href="book.mbstring.php" class="link">mbstring</a>-Erweiterung.
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     Andere verwenden die aktuelle Locale (siehe
     <span class="function"><a href="function.setlocale.php" class="function">setlocale()</a></span>), arbeiten aber Byte für Byte.
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     Letztendlich können sie einfach davon ausgehen, dass der String eine
     bestimmte Kodierung verwendet, normalerweise UTF-8. Dies ist der Fall bei
     den meisten Funktionen in der
     <a href="book.intl.php" class="link">intl</a>-Erweiterung und in der
     <a href="book.pcre.php" class="link">PCRE</a>-Erweiterung (im letzteren Fall nur,
     wenn der Modifikator <code class="literal">u</code> verwendet wird).
    </span>
   </li>
  </ul>

  <p class="para">
   Letztlich bedeutet dies, dass das Schreiben korrekter Programme mit Unicode
   davon abhängt, Funktionen, die nicht funktionieren und die Daten
   höchstwahrscheinlich beschädigen, sorgfältig zu vermeiden und stattdessen
   die Funktionen zu verwenden, die sich korrekt verhalten. Im Allgemeinen
   sind das die Funktionen der <a href="book.intl.php" class="link">intl</a>- und
   <a href="book.mbstring.php" class="link">mbstring</a>-Erweiterungen. Die Verwendung
   von Funktionen, die Unicode-Kodierungen verarbeiten können, ist jedoch nur
   der Anfang. Unabhängig von den Funktionen, die die Sprache zur Verfügung
   stellt, ist es wichtig, die Unicode-Spezifikation zu kennen. Ein Programm,
   das zum Beispiel davon ausgeht, dass es nur Groß- und Kleinbuchstaben gibt,
   geht von einer falschen Annahme aus.
  </p>
 </div>
</div><?php manual_footer($setup); ?>