<?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 => 'uk',
  ),
  'this' => 
  array (
    0 => 'language.types.string.php',
    1 => 'Рядок (string)',
    2 => 'Рядок (string)',
  ),
  'up' => 
  array (
    0 => 'language.types.php',
    1 => 'Типи',
  ),
  'prev' => 
  array (
    0 => 'language.types.float.php',
    1 => 'Десятковий дріб (float)',
  ),
  'next' => 
  array (
    0 => 'language.types.numeric-strings.php',
    1 => 'Numeric strings',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'uk',
    '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">Рядок (string)</h2>

 <p class="para">
  Рядок (<span class="type"><a href="language.types.string.php" class="type string">string</a></span>) — це набір символів, кожному з яких відповідає
  певний байт. Це означає, що PHP підтримує всього 256 різних символів, а отже
  не має вбудованої підтримки Unicode. Див.
  <a href="language.types.string.php#language.types.string.details" class="link">деталі про рядковий тип</a>.
 </p>

 <blockquote class="note"><p><strong class="note">Зауваження</strong>: 
  <span class="simpara">
   В 32-бітних збірках значення типу <span class="type"><a href="language.types.string.php" class="type string">string</a></span> може мати розмір до
   2ГБ (2147483647 байт).
  </span>
 </p></blockquote>

 <div class="sect2" id="language.types.string.syntax">
  <h3 class="title">Синтаксис</h3>

  <p class="para">
   Записувати символами значення типу <span class="type"><a href="language.types.string.php" class="type string">string</a></span> можна чотирма
   способами:
  </p>

  <ul class="itemizedlist">
   <li class="listitem">
    <span class="simpara">
     <a href="language.types.string.php#language.types.string.syntax.single" class="link">апострофи</a>
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <a href="language.types.string.php#language.types.string.syntax.double" class="link">лапки</a>
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <a href="language.types.string.php#language.types.string.syntax.heredoc" class="link">синтаксис heredoc</a>
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <a href="language.types.string.php#language.types.string.syntax.nowdoc" class="link">синтаксис nowdoc</a>
    </span>
   </li>
  </ul>

  <div class="sect3" id="language.types.string.syntax.single">
   <h4 class="title">Апострофи</h4>

   <p class="para">
    Найпростіший спосіб означити рядок (<span class="type"><a href="language.types.string.php" class="type string">string</a></span>) — взяти його в
    апострофи (наприклад <code class="literal">&#039;це рядкове значення&#039;</code>).
   </p>

   <p class="para">
    Щоб вписати в рядок апостроф, цей знак необхідно екранувати
    оберненою косою рискою (<code class="literal">\</code>). Щоб всередині рядкового
    значення вписати обернену косу риску, треба продублювати її
    (<code class="literal">\\</code>). Всі наступні символи оберненої косої риски будуть
    сприйматись буквально: це означає, що всі інші екрановані послідовності,
    наприклад <code class="literal">\r</code> або <code class="literal">\n</code> будуть виводитись
    буквально, а не як такі, що мають спеціальне значення.
   </p>

   <blockquote class="note"><p><strong class="note">Зауваження</strong>: 
    <span class="simpara">
     На відміну від 
     <a href="language.types.string.php#language.types.string.syntax.double" class="link">лапок</a>
     та синтаксису
     <a href="language.types.string.php#language.types.string.syntax.heredoc" class="link">heredoc</a>,
     <a href="language.variables.php" class="link">змінні</a> та екрановані
     послідовності спеціальних символів <em>не</em> будуть
     розкриті в рядках, взятих в апострофи.
    </span>
   </p></blockquote>

   <div class="informalexample">
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">'це звичайний рядок'</span><span style="color: #007700">;<br /><br />echo </span><span style="color: #DD0000">'Також можна додавати<br />символ нового рядка,<br />це допустимо'</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// Виводить: Якось Арнольд сказав: "I'll be back"<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">'Якось Арнольд сказав: "I\'ll be back"'</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// Виводить: Ви видалили C:\*.*?<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">'Ви видалили C:\\*.*?'</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// Виводить: Ви видалили C:\*.*?<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">'Ви видалили C:\*.*?'</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// Виводить: Це не розкриється: \n a newline<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">'Це не розкриється: \n a newline'</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// Виводить: Змінні $також $не_розкриваються<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">'Змінні $також $не_розкриваються'</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">Лапки</h4>

   <p class="para">
    Якщо рядок (<span class="type"><a href="language.types.string.php" class="type string">string</a></span>) взято в лапки (<code class="literal">&quot;</code>), то
    PHP інтерпретує наступні екрановані послідовності у спеціальні символи:
   </p>

   <table class="doctable table">
    <caption><strong>Екрановані символи</strong></caption>

    
     <thead>
      <tr>
       <th>Послідовність</th>
       <th>Значення</th>
      </tr>

     </thead>


     <tbody class="tbody">
      <tr>
       <td><code class="literal">\n</code></td>
       <td>новий рядок (LF (linefeed) або 0x0A (10) в ASCII)</td>
      </tr>

      <tr>
       <td><code class="literal">\r</code></td>
       <td>повернення каретки (CR (carriage return) або 0x0D (13) в ASCII)</td>
      </tr>

      <tr>
       <td><code class="literal">\t</code></td>
       <td>горизонтальна табуляція (HT (horizontal tab) або 0x09 (9) в ASCII)</td>
      </tr>

      <tr>
       <td><code class="literal">\v</code></td>
       <td>вертикальна табуляція (VT (vertical tab) або 0x0B (11) в ASCII)</td>
      </tr>

      <tr>
       <td><code class="literal">\e</code></td>
       <td>escape-символ (ESC або 0x1B (27) в ASCII)</td>
      </tr>

      <tr>
       <td><code class="literal">\f</code></td>
       <td>розрив сторінки (FF (form feed) або 0x0C (12) в ASCII)</td>
      </tr>

      <tr>
       <td><code class="literal">\\</code></td>
       <td>обернена коса риска</td>
      </tr>

      <tr>
       <td><code class="literal">\$</code></td>
       <td>знак долара</td>
      </tr>

      <tr>
       <td><code class="literal">\&quot;</code></td>
       <td>лапка</td>
      </tr>

      <tr>
       <td><code class="literal">\[0-7]{1,3}</code></td>
       <td>
        Вісімкове число: послідовність символів, що відповідає регулярному
        виразу <code class="literal">[0-7]{1,3}</code> та є вісімковою формою запису
        символа (напр. <code class="literal">&quot;\101&quot; === &quot;A&quot;</code>), що неявно
        переповнюється, щоб відповідати одному байту (напр.
        <code class="literal">&quot;\400&quot; === &quot;\000&quot;</code>)
       </td>
      </tr>

      <tr>
       <td><code class="literal">\x[0-9A-Fa-f]{1,2}</code></td>
       <td>
        Шістнадцяткове число: послідовність символів, що відповідає регулярному
        виразу <code class="literal">[0-9A-Fa-f]{1,2}</code> та є шістнадцятковою формою
        запису символа (напр. <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: послідовність символів, що відповідає регулярному виразу
        <code class="literal">[0-9A-Fa-f]+</code> та є кодовою точкою UTF-8, символ якої
        буде вставлено у рядок. Фігурні дужки є обов&#039;язковими у цій
        послідовності. Наприклад <code class="literal">&quot;\u{41}&quot; === &quot;A&quot;</code>
       </td>
      </tr>

     </tbody>
    
   </table>


   <p class="para">
    В рядках (<span class="type"><a href="language.types.string.php" class="type string">string</a></span>), що взяті в апострофи, екранування інших
    символів також призведе до друку оберненої косої риски.
   </p>

   <p class="para">
    Найважливішою особливістю рядків (<span class="type"><a href="language.types.string.php" class="type string">string</a></span>) в лапках є
    розкривання значень змінних. Детальніше:
    <a href="language.types.string.php#language.types.string.parsing" class="link">Інтерполяція рядків</a>.
   </p>
  </div>

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

   <p class="simpara">
    Третій спосіб запису значення типу <span class="type"><a href="language.types.string.php" class="type string">string</a></span> — синтаксис heredoc:
    <code class="literal">&lt;&lt;&lt;</code>. Після цього оператора слідують
    мітка та символ нового рядка. Далі — власне, текст (<span class="type"><a href="language.types.string.php" class="type string">string</a></span>), а
    потім та сама мітка з нового рядка. Вона позначає кінець тексту.
   </p>

   <p class="simpara">
    В кінці перед міткою можуть бути пропуски або символи табуляції. Тоді такі ж
    відступи будуть видалені з початку усіх рядків тексту. До PHP 7.3.0, мітка в
    кінці <em>повинна</em> бути одразу після символа нового рядка.
   </p>

   <p class="simpara">
    Також мітка має відповідати правилам називання міткок в PHP: містити тільки
    букви, цифри, підкреслення та починатися з букви або підкреслення.
   </p>

   <div class="example" id="example-1">
    <p><strong>Приклад #1 Простий приклад Heredoc, починаючи з PHP 7.3.0</strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">// без відступів<br /></span><span style="color: #007700">echo &lt;&lt;&lt;МІТКА<br /></span><span style="color: #DD0000">      а<br />     б<br />    в<br />\n<br /></span><span style="color: #007700">МІТКА;<br /><br /></span><span style="color: #FF8000">// відступ з 4-х пропусків<br /></span><span style="color: #007700">echo &lt;&lt;&lt;МІТКА<br /></span><span style="color: #DD0000">      а<br />     б<br />    в<br /></span><span style="color: #007700">    МІТКА;</span></span></code></div>
    </div>

    <div class="example-contents"><p>В PHP 7.3 поданий вище приклад
виведе:</p></div>
    <div class="example-contents screen">
<div class="cdata"><pre>
      а
     б
    в

  а
 б
в
</pre></div>
    </div>
   </div>

   <p class="simpara">
    Якщо кінцева мітка відступає далі ніж будь-який рядок тексту, то викинеться
    <span class="classname"><a href="class.parseerror.php" class="classname">ParseError</a></span>:
   </p>

   <div class="example" id="example-2">
    <p><strong>Приклад #2 Кінцева мітка не має відступати далі ніж будь-який рядок тексту</strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">echo &lt;&lt;&lt;МІТКА<br /></span><span style="color: #DD0000">  а<br /> б<br />в<br /></span><span style="color: #007700">   МІТКА;</span></span></code></div>
    </div>

    <div class="example-contents"><p>В PHP 7.3 поданий вище приклад
виведе:</p></div>
    <div class="example-contents screen">
<div class="cdata"><pre>
PHP 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">
    Для відступу кінцевої мітки можна використовувати табуляцію, однак табуляція
    та пропуски <em>не повинні</em> змішуватися у відступах тексту
    чи кінцевої мітки. Інакше, буде викинуто <span class="classname"><a href="class.parseerror.php" class="classname">ParseError</a></span>.

    Це обмеження було введено у зв&#039;язку з тим, що змішування табуляції та
    пропусків погіршує розбірливість коду.
   </p>

   <div class="example" id="example-3">
    <p><strong>Приклад #3 Різні відступи</strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">// Увесь наступний код не працює.<br /><br />// різні відступи в тексті (пропуски) та для кінцевої мітки (табуляція)<br /></span><span style="color: #007700">{<br />    echo &lt;&lt;&lt;МІТКА<br /></span><span style="color: #DD0000">     а<br /></span><span style="color: #007700">        МІТКА;<br />}<br /><br /></span><span style="color: #FF8000">// змішування пропусків та табуляції в тексті<br /></span><span style="color: #007700">{<br />    echo &lt;&lt;&lt;МІТКА<br /></span><span style="color: #DD0000">        а<br /></span><span style="color: #007700">     МІТКА;<br />}<br /><br /></span><span style="color: #FF8000">// змішування пропусків та табуляції для кінцевої мітки<br /></span><span style="color: #007700">{<br />    echo &lt;&lt;&lt;МІТКА<br /></span><span style="color: #DD0000">          а<br /></span><span style="color: #007700">         МІТКА;<br />}</span></span></code></div>
    </div>

    <div class="example-contents"><p>В PHP 7.3 поданий вище приклад
виведе:</p></div>
    <div class="example-contents screen">
<div class="cdata"><pre>
PHP Parse error:  Invalid indentation - tabs and spaces cannot be mixed in example.php line 8
</pre></div>
    </div>
   </div>

   <p class="simpara">
    Крапка з комою чи символ нового рядка після кінцевої мітки не є
    обов&#039;язковими. До прикладу, наступний код дозволений, починаючи з PHP 7.3.0:
   </p>

   <div class="example" id="example-4">
    <p><strong>Приклад #4 Продовження виразу після кінцевої мітки</strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$значення </span><span style="color: #007700">= [&lt;&lt;&lt;МІТКА<br /></span><span style="color: #DD0000">а<br />  б<br />    в<br /></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: #0000BB">$значення</span><span style="color: #007700">);</span></span></code></div>
    </div>

    <div class="example-contents"><p>В PHP 7.3 поданий вище приклад
виведе:</p></div>
    <div class="example-contents screen">
<div class="cdata"><pre>
array(2) {
  [0]=&gt;
  string(14) &quot;а
  б
    в&quot;
  [1]=&gt;
  string(8) &quot;г ґ д&quot;
}
</pre></div>
    </div>
   </div>

   <div class="warning"><strong class="warning">Увага</strong>
    <p class="simpara">
     Якщо назву мітки знайдено одразу після символу початку рядка, то навіть
     якщо це була частина тексту, вона розглядатиметься як кінцева мітка, що
     спричинить помилку <span class="classname"><a href="class.parseerror.php" class="classname">ParseError</a></span>.
    </p>

    <div class="example" id="example-5">
     <p><strong>Приклад #5 Кінцева мітка в тексті може викликати ParseError</strong></p>
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$значення </span><span style="color: #007700">= [&lt;&lt;&lt;МІТКА<br /></span><span style="color: #DD0000">а<br />б<br /></span><span style="color: #007700">МІТКА </span><span style="color: #0000BB">помічає кінець тексту<br />МІТКА</span><span style="color: #007700">, </span><span style="color: #DD0000">'в г ґ'</span><span style="color: #007700">];</span></span></code></div>
     </div>

     <div class="example-contents"><p>В PHP 7.3 поданий вище приклад
виведе:</p></div>
    <div class="example-contents screen">
<div class="cdata"><pre>
PHP Parse error:  syntax error, unexpected identifier &quot;помічає&quot;, expecting &quot;]&quot; in example.php on line 5
</pre></div>
     </div>
    </div>

    <p class="simpara">
     Щоб уникнути цієї проблеми, безпечніше дотримуватися простого правила:
     <em>не обирати мітку, яка може з&#039;явитися в тексті</em>.
    </p>

   </div>

   <div class="warning"><strong class="warning">Увага</strong>
    <p class="simpara">
     До PHP 7.3.0, необхідно слідкувати за тим, щоб рядок з кінцевою міткою не
     містив нічого, крім самої мітки та крапки з комою (<code class="literal">;</code>) за
     нею. Це означає, що мітка <em>не може відступати</em> від
     початку рядка, а також не може бути жодних пропусків чи табуляції перед чи
     після крапки з комою. Також важливо, щоб символом перед кінцевою міткою
     був символ нового рядка, визначений локальною операційною системою. Це
     <code class="literal">\n</code> в системах UNIX, включно з macOS. Також цей символ
     має бути одразу після крапки з комою.
    </p>

    <p class="simpara">
     Якщо це правило порушено і кінцева мітка неправильна — вона не
     вважатиметься такою, а PHP продовжить шукати кінцеву мітку. Якщо до кінця
     поточного файлу мітку не буде знайдено, то на останньому рядку виникне
     синтаксична помилка.
    </p>

    <div class="example" id="example-6">
     <p><strong>Приклад #6 Недійсна мітка, до версії PHP 7.3.0</strong></p>
     <div class="example-contents">
      
<div class="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;МІТКА<br /></span><span style="color: #DD0000">bar<br /></span><span style="color: #007700">    МІТКА;<br />}<br /></span><span style="color: #FF8000">// Мітка повинна не мати відступів<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
    <div class="example" id="example-7">
     <p><strong>Приклад #7 Дійсна мітка, навіть до версії PHP 7.3.0</strong></p>
     <div class="example-contents">
      
<div class="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;МІТКА<br /></span><span style="color: #DD0000">bar<br /></span><span style="color: #007700">МІТКА;<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>

    <p class="para">
     Дані рядкового типу в синтаксисі Heredoc, які містять змінні, не можна
     використовувати для ініціалізації властивостей класу.
    </p>

   </div>

   <p class="para">
    Текст Heredoc має ті ж особливості, що і рядок (<span class="type"><a href="language.types.string.php" class="type string">string</a></span>) в
    лапках, просто без лапок. Це означає, що лапки в Heredoc не потрібно
    екранувати, а перелічені вище екрановані послідовності досі можна
    використовувати. Змінні так само розкриваються, а складні змінні записуються
    тим же способом, що і в рядках (<span class="type"><a href="language.types.string.php" class="type string">string</a></span>).
   </p>

   <div class="example" id="example-8">
    <p><strong>Приклад #8 Вставлення інших рядків в Heredoc</strong></p>
    <div class="example-contents">
<div class="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">Приклад тексту<br />з синтаксисом heredoc,<br />що складається з кількох рядків.<br /></span><span style="color: #007700">EOD;<br /><br /></span><span style="color: #FF8000">/* Складніший приклад, зі змінними. */<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">'Петро'</span><span style="color: #007700">;<br /><br />echo &lt;&lt;&lt;EOT<br /></span><span style="color: #DD0000">Мене звати </span><span style="color: #0000BB">$name</span><span style="color: #DD0000">. Я друкую </span><span style="color: #0000BB">$foo</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">foo</span><span style="color: #DD0000">.<br />Зараз я друкую </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">.<br />Має надрукуватись велика буква 'A': \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>Поданий вище приклад
виведе:</p></div>
    <div class="example-contents screen">
<div class="cdata"><pre>
Мене звати Петро. Я друкую Foo.
Зараз я друкую Bar2.
Має надрукуватись велика буква &#039;A&#039;: A</pre></div>
    </div>
   </div>

   <p class="para">
    Також можливо використовувати Heredoc-синтаксис для передавання параметрів
    до функції:
   </p>

   <div class="example" id="example-9">
    <p><strong>Приклад #9 Heredoc в значеннях параметрів</strong></p>
    <div class="example-contents">
<div class="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">
    Можна задавати значення статичним змінним та властивостям/константам класу,
    використовуючи синтаксис Heredoc:
   </p>

   <div class="example" id="example-10">
    <p><strong>Приклад #10 Heredoc як статичне значення</strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">// Поле класу<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">Тут нічого цікавого...<br /></span><span style="color: #007700">LABEL;<br />}<br /><br /></span><span style="color: #FF8000">// Властивість, константа класу<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">Приклад константи<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">Приклад властивості<br /></span><span style="color: #007700">FOOBAR;<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>

   <p class="para">
    Початкову мітку Heredoc можна брати в лапки:
   </p>

   <div class="example" id="example-11">
    <p><strong>Приклад #11 Використання лапок в Heredoc</strong></p>
    <div class="example-contents">
<div class="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">Привіт, світ!<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">
    Синтаксис nowdoc стосується рядків в апострофах, як heredoc — рядків в
    лапках, тобто працює схожим способом до heredoc, але <em>без
    інтерполяції тексту</em> всередині. Така конструкція прекрасно
    підходить для вставлення PHP-коду або великих частин тексту без необхідності
    їхнього екранування. Цей синтаксис має деякі спільні риси з конструкцією
    SGML <code class="literal">&lt;![CDATA[ ]]&gt;</code>, оскільки він оголошує блок
    тексту, який не підлягає аналізу.
   </p>

   <p class="para">
    Nowdoc починається з тої ж послідовності <code class="literal">&lt;&lt;&lt;</code>, що
    й heredocs, але назва мітки, що йде далі, береться в апострофи, напр.
    <code class="literal">&lt;&lt;&lt;&#039;EOT&#039;</code>. Усі правила щодо міток heredoc
    застосовуються також до міток nowdoc, особливо ті, що стосуються кінцевої
    мітки.
   </p>

   <div class="example" id="example-12">
    <p><strong>Приклад #12 Приклад тексту nowdoc</strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">echo &lt;&lt;&lt;'МІТКА'<br /></span><span style="color: #DD0000">Приклад тексту з кількома рядками<br />з використанням синтаксису nowdoc.<br />Зворотні косі риски завжди спиймаються буквально, напр. \\ і \'.<br /></span><span style="color: #007700">МІТКА;</span></span></code></div>
    </div>

    <div class="example-contents"><p>Поданий вище приклад
виведе:</p></div>
    <div class="example-contents screen">
<div class="cdata"><pre>
Приклад тексту з кількома рядками
з використанням синтаксису nowdoc.
Зворотні косі риски завжди спиймаються буквально, напр. \\ і \&#039;.
</pre></div>
    </div>
   </div>

   <div class="example" id="example-13">
    <p><strong>Приклад #13 Текст nowdoc зі змінними всередині</strong></p>
    <div class="example-contents">
<div class="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">'Петро'</span><span style="color: #007700">;<br /><br />echo &lt;&lt;&lt;'EOT'<br /></span><span style="color: #DD0000">Мене звати $name. Я друкую $foo-&gt;foo.<br />Зараз я друкую {$foo-&gt;bar[1]}.<br />Має НЕ надрукуватись велика буква 'A': \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>Поданий вище приклад
виведе:</p></div>
    <div class="example-contents screen">
<div class="cdata"><pre>
Мене звати $name. Я друкую $foo-&gt;foo.
Зараз я друкую {$foo-&gt;bar[1]}.
Має НЕ надрукуватись велику буква &#039;A&#039;: \x41</pre></div>
    </div>
   </div>

   <div class="example" id="example-14">
    <p><strong>Приклад #14 Зі статичними даними</strong></p>
    <div class="example-contents">
<div class="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">Інтерполяція рядка</h4>

   <p class="simpara">
    Якщо рядок (<span class="type"><a href="language.types.string.php" class="type string">string</a></span>) записано в лапках або в heredoc, то
    в нього можна вставляти <a href="language.variables.php" class="link">змінні</a>.
   </p>

   <p class="simpara">
    Є два способи запису:
    <a href="language.types.string.php#language.types.string.parsing.basic" class="link">основний</a> та
    <a href="language.types.string.php#language.types.string.parsing.advanced" class="link">розширений</a>.
    Основний синтаксис є найпоширенішим і найзручнішим. Він надає можливість
    вбудувати змінну, значення масиву (<span class="type"><a href="language.types.array.php" class="type array">array</a></span>), або властивість
    об&#039;єкта (<span class="type"><a href="language.types.object.php" class="type object">object</a></span>) в рядок (<span class="type"><a href="language.types.string.php" class="type string">string</a></span>) з невеликими
    зусиллями.
   </p>

   <div class="sect4" id="language.types.string.parsing.basic">
    <h5 class="title">Основний синтаксис</h5>
    <p class="simpara">
     Якщо трапляється знак долара (<code class="literal">$</code>), а після — символи, що
     є допустимими у назві змінної, то така послідовність вважається, власне,
     змінною, а в текст замість неї підставляється її рядкове значення. 
    </p>
    <div class="informalexample">
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$фрукт </span><span style="color: #007700">= </span><span style="color: #DD0000">"персик"</span><span style="color: #007700">;<br /><br />echo </span><span style="color: #DD0000">"Він з'їв </span><span style="color: #0000BB">$фрукт</span><span style="color: #DD0000">." </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>

     <p class="para">Поданий вище приклад
виведе:</p>
     <div class="example-contents screen">
<div class="cdata"><pre>
Він з&#039;їв персик.
</pre></div>
     </div>
    </div>

    <p class="simpara">
     Формально, структура основного синтаксису підставлення змінних є такою:
    </p>
    <div class="informalexample">
     <div class="example-contents">
<div class="cdata"><pre>
рядкова-змінна::
     назва-змінної   (зміщення-або-властивість)?
   | ${   вираз   }

зміщення-або-властивість::
     зміщення-в-рядку
   | властивість-в-рядку

зміщення-в-рядкуg::
     [   назва   ]
   | [   назва-змінної   ]
   | [   цифровий-літерал   ]

властивість-в-рядку::
     -&gt;  назва

назва-змінної::
     $   назва

назва::
     [a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*

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

    </div>

    <div class="warning"><strong class="warning">Увага</strong>
     <p class="para">
      Синтаксис <code class="literal">${ вираз }</code> є застарілим, починаючи з PHP
      8.2.0, оскільки його можна інтерпретувати як
      <a href="language.variables.variable.php" class="link">змінну змінної</a>:
      <div class="informalexample">
       <div class="example-contents">
<div class="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">В PHP 8.2 поданий вище приклад
виведе:</p>
       <div class="example-contents screen">
<div class="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">Поданий вище приклад
виведе:</p>
       <div class="example-contents screen">
<div class="cdata"><pre>
string(3) &quot;foo&quot;
string(3) &quot;bar&quot;
</pre></div>
       </div>
      </div>
      В такому випадку використовується <a href="language.types.string.php#language.types.string.parsing.advanced" class="link">розширений</a>
      синтаксис інтерполяції рядка.
     </p>
    </div>

    <blockquote class="note"><p><strong class="note">Зауваження</strong>: 
     <span class="simpara">
      Якщо не вдається сформувати прийнятну назву змінної, то знак долара
      відтворюється в рядку буквально:
     </span>
     <div class="informalexample">
      <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"Інтерполяція $  не відбувається\n"</span><span style="color: #007700">;<br />echo </span><span style="color: #DD0000">"Інтерполяція $\n не відбувається\n"</span><span style="color: #007700">;<br />echo </span><span style="color: #DD0000">"Інтерполяція $2 не відбувається\n"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
      </div>

      <p class="para">Поданий вище приклад
виведе:</p>
      <div class="example-contents screen">
<div class="cdata"><pre>
Інтерполяція $  не відбувається
Інтерполяція $
 не відбувається
Інтерполяція $2 не відбувається
</pre></div>
      </div>
     </div>
    </p></blockquote>

    <div class="example" id="example-15">
     <p><strong>Приклад #15 Інтерполяція значення першого виміру масиву або властивості</strong></p>
     <div class="example-contents">
<div class="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">"яблучний"</span><span style="color: #007700">, </span><span style="color: #DD0000">"апельсиновий"</span><span style="color: #007700">, </span><span style="color: #DD0000">"string_key" </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">"фіолетовий"</span><span style="color: #007700">);<br /><br />echo </span><span style="color: #DD0000">"Він випив </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"> сік."</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">"Він випив </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"> сік."</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">"Він випив </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"> сік."</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">"рядок"</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">"Значення об'єкту: </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>Поданий вище приклад
виведе:</p></div>
     <div class="example-contents screen">
<div class="cdata"><pre>
Він випив яблучний сік.
Він випив апельсиновий сік.
Він випив фіолетовий сік.
Значення об&#039;єкту: рядок.
</pre></div>
     </div>
    </div>

    <blockquote class="note"><p><strong class="note">Зауваження</strong>: 
     <span class="simpara">
      Ключ масиву не повинен бути в лапках чи апострофах, і тому не можна
      посилатися на константу як на ключ за допомогою основного синтаксису. Для
      цього використовується <a href="language.types.string.php#language.types.string.parsing.advanced" class="link">розширений</a>
      синтаксис.
     </span>
    </p></blockquote>

    <p class="simpara">
     Починаючи з PHP 7.1.0, підтримуються <em>від&#039;ємні</em>
     цілочисельні індекси.
    </p>

    <div class="example" id="example-16"><p><strong>Приклад #16 Від&#039;ємні цілочисельні індекси</strong></p>
     <div class="example-contents">
<div class="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">"Символ з індексом -2 є \"</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">"Зміна символа з індексом -3 на \"o\" дає \"</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>Поданий вище приклад
виведе:</p></div>
     <div class="example-contents screen">
<div class="cdata"><pre>
Символ з індексом -2 є &quot;n&quot;.
Зміна символа з індексом -3 на &quot;o&quot; дає &quot;strong&quot;.
</pre></div>
     </div>
    </div>

    <p class="simpara">
     Для чогось складнішого використовується <a href="language.types.string.php#language.types.string.parsing.advanced" class="link">розширений</a>
     синтаксис.
    </p>
   </div>

   <div class="sect4" id="language.types.string.parsing.advanced">
    <h5 class="title">Розширений синтаксис</h5>

    <p class="simpara">
     Розширений синтаксис дозволяє інтерполяцію <em>змінних</em>
     довільної форми.
    </p>

    <p class="simpara">
     Будь-яка скалярна змінна, елемент масиву або властивість об&#039;єкту
     (<span class="modifier">static</span> чи ні) з рядковим (<span class="type"><a href="language.types.string.php" class="type string">string</a></span>)
     представленням можна вставити в рядок за допомогою цього синтаксису. Вираз
     записується так, як він виглядає поза рядком (<span class="type"><a href="language.types.string.php" class="type string">string</a></span>) та
     береться в фігурні дужки (<code class="literal">{</code> та <code class="literal">}</code>).
     Оскільки <code class="literal">{</code> не екранується, то цей синтаксис правильний
     тільки, якщо <code class="literal">$</code> слідує одразу після <code class="literal">{</code>.
     Щоб буквально вивести послідовність <code class="literal">{$</code>, треба записати
     її так: <code class="literal">{\$</code>. Ось кілька прикладів для наочності:
    </p>

    <div class="informalexample">
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br /></span><span style="color: #007700">const </span><span style="color: #0000BB">DATA_KEY </span><span style="color: #007700">= </span><span style="color: #DD0000">'ключ-константа'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$great </span><span style="color: #007700">= </span><span style="color: #DD0000">'фантастично'</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">'ключ' </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'Індексоване значення'</span><span style="color: #007700">,<br />    </span><span style="color: #DD0000">'ключ-константа' </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'Від\'ємний ключ'</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">// Не працює, виводить: Це { фантастично}<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"Це { </span><span style="color: #0000BB">$great</span><span style="color: #DD0000">}"</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// Працює, виводить: Це фантастично<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"Це </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">// Працює<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"Цей квадрат має ширину </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 сантиметрів."</span><span style="color: #007700">;<br /><br /><br /></span><span style="color: #FF8000">// Працює, ключі в апострофах чи лапках працюють тільки в розширеному синтаксисі<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"Це працює: </span><span style="color: #007700">{</span><span style="color: #0000BB">$arr</span><span style="color: #007700">[</span><span style="color: #DD0000">'ключ'</span><span style="color: #007700">]}</span><span style="color: #DD0000">"</span><span style="color: #007700">;<br /><br /><br /></span><span style="color: #FF8000">// Працює<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"Це працює: </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">"Це працює: </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">// Вставляючи елементи багатовимірних масивів в рядок, завжди потрібно брати їх<br />// у фігурні дужки<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"це працює: </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">"Це працює: </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">"Це працює: </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">// Не працює, виводить: C:\folder\{фантастично}.txt<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"C:\folder\{</span><span style="color: #0000BB">$great</span><span style="color: #DD0000">}.txt"</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// Працює, виводить: C:\folder\фантастично.txt<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"C:\\folder\\</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">Зауваження</strong>: 
     <span class="simpara">
      Оскільки розширений синтаксис підтримує довільні вирази, то використання
      <a href="language.variables.variable.php" class="link">змінних змінних</a> —
      дозволено.
     </span>
    </p></blockquote>
   </div>
  </div>

  <div class="sect3" id="language.types.string.substr">
   <h4 class="title">Зміна рядка та посимвольне редагування</h4>

   <p class="para">
    Доступ до символа в рядку (<span class="type"><a href="language.types.string.php" class="type string">string</a></span>) можна отримати, як до
    елемента масиву (<span class="type"><a href="language.types.array.php" class="type array">array</a></span>), вказавши в квадратних дужках позицію
    символа, рахуючи від нуля, наприклад, <var class="varname">$str[42]</var> (43-й
    символ рядка <var class="varname">str</var>). Тобто, з цією метою потрібно вважати
    рядок (<span class="type"><a href="language.types.string.php" class="type string">string</a></span>) масивом (<span class="type"><a href="language.types.array.php" class="type array">array</a></span>) символів. Функції
    <span class="function"><a href="function.substr.php" class="function">substr()</a></span> та <span class="function"><a href="function.substr-replace.php" class="function">substr_replace()</a></span> можна
    використати для зчитування або заміни більше ніж одного символа.
   </p>

   <blockquote class="note"><p><strong class="note">Зауваження</strong>: 
    <span class="simpara">
     Починаючи з PHP 7.1.0, також підтримуються від&#039;ємні позиції. Їх
     відраховують з кінця рядка. Раніше використання від&#039;ємних позицій викликало
     повідомлення <strong><code><a href="errorfunc.constants.php#constant.e-notice">E_NOTICE</a></code></strong> під час зчитування (повертаючи
     порожній рядок) та <strong><code><a href="errorfunc.constants.php#constant.e-warning">E_WARNING</a></code></strong> під час запису (не
     змінюючи рядка).
    </span>
   </p></blockquote>

   <blockquote class="note"><p><strong class="note">Зауваження</strong>: 
    <span class="simpara">
     До PHP 8.0.0, з тією самою метою рядки (<span class="type"><a href="language.types.string.php" class="type string">string</a></span>) підтримують
     фігурні дужки, напр. <var class="varname">$str{42}</var>. Такий синтаксис
     застарілий, починаючи з PHP 7.4.0, та видалений в PHP 8.0.0.
    </span>
   </p></blockquote>

   <div class="warning"><strong class="warning">Увага</strong>
    <p class="simpara">
     Запис в позицію за межами рядка доповнює рядок пропусками. Не цілочисельні
     позиції перетворюються в цілі числа. Якщо задано недопустимий тип позиції,
     виводиться <strong><code><a href="errorfunc.constants.php#constant.e-warning">E_WARNING</a></code></strong>. Записується тільки перший символ
     заданого рядка. Починаючи з PHP 7.1.0, заданий порожній рядок викликає
     фатальну помилку. Раніше, він перетворювався в NULL-байт.
    </p>
   </div>

   <div class="warning"><strong class="warning">Увага</strong>
    <p class="simpara">
     Всередині інтерпретатора рядки є масивами байтів. Як наслідок, доступ до
     рядка або його редагування, як масиву, не є безпечним для багатобайтових
     кодувань і має здійснюватися лише з рядками в однобайтовому кодуванні,
     наприклад, ISO-8859-1.
    </p>
   </div>

   <blockquote class="note"><p><strong class="note">Зауваження</strong>: 
    <span class="simpara">
     Починаючи з PHP 7.1.0, застосування порожнього оператора індексу до
     порожнього рядка призводить до фатальної помилки. Раніше порожній рядок
     автоматично перетворювався на масив.
    </span>
   </p></blockquote>

   <div class="example" id="example-17">
    <p><strong>Приклад #17 Some string examples</strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">// Get the first character of a string<br /></span><span style="color: #0000BB">$str </span><span style="color: #007700">= </span><span style="color: #DD0000">'This is a 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 /><br /></span><span style="color: #FF8000">// Get the third character of a string<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 /><br /></span><span style="color: #FF8000">// Get the last character of a string.<br /></span><span style="color: #0000BB">$str </span><span style="color: #007700">= </span><span style="color: #DD0000">'This is still a 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 /><br /></span><span style="color: #FF8000">// Modify the last character of a string<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 /><br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>

   <p class="para">
    String offsets have to either be integers or integer-like strings,
    otherwise a warning will be thrown.
   </p>

   <div class="example" id="example-18">
    
    <p><strong>Приклад #18 Example of Illegal String Offsets</strong></p>
    <div class="example-contents">
<div class="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">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$str</span><span style="color: #007700">[</span><span style="color: #DD0000">'1'</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: #DD0000">'1'</span><span style="color: #007700">]));<br /><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: #DD0000">'1.0'</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: #DD0000">'1.0'</span><span style="color: #007700">]));<br /><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: #DD0000">'x'</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: #DD0000">'x'</span><span style="color: #007700">]));<br /><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: #DD0000">'1x'</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: #DD0000">'1x'</span><span style="color: #007700">]));<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

    <div class="example-contents"><p>Поданий вище приклад
виведе:</p></div>
    <div class="example-contents screen">
<div class="cdata"><pre>
string(1) &quot;b&quot;
bool(true)

Warning: Illegal string offset &#039;1.0&#039; in /tmp/t.php on line 7
string(1) &quot;b&quot;
bool(false)

Warning: Illegal string offset &#039;x&#039; in /tmp/t.php on line 9
string(1) &quot;a&quot;
bool(false)
string(1) &quot;b&quot;
bool(false)
</pre></div>
    </div>
   </div>

   <blockquote class="note"><p><strong class="note">Зауваження</strong>: 
    <p class="para">
     Accessing variables of other types (not including arrays or objects
     implementing the appropriate interfaces) using <code class="literal">[]</code> or
     <code class="literal">{}</code> silently returns <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong>.
    </p>
   </p></blockquote>

   <blockquote class="note"><p><strong class="note">Зауваження</strong>: 
    <p class="para">
     Characters within string literals can be accessed
     using <code class="literal">[]</code> or <code class="literal">{}</code>.
    </p>
   </p></blockquote>

   <blockquote class="note"><p><strong class="note">Зауваження</strong>: 
    <p class="para">
     Accessing characters within string literals using the
     <code class="literal">{}</code> syntax has been deprecated in PHP 7.4.
     This has been removed in PHP 8.0.
    </p>
   </p></blockquote>
  </div>
 </div>

 <div class="sect2" id="language.types.string.useful-funcs">
  <h3 class="title">Useful functions and operators</h3>

  <p class="para">
   <span class="type"><a href="language.types.string.php" class="type String">String</a></span>s may be concatenated using the &#039;.&#039; (dot) operator. Note
   that the &#039;+&#039; (addition) operator will <em>not</em> work for this.
   See <a href="language.operators.string.php" class="link">String operators</a> for
   more information.
  </p>

  <p class="para">
   There are a number of useful functions for <span class="type"><a href="language.types.string.php" class="type string">string</a></span> manipulation.
  </p>

  <p class="simpara">
   See the <a href="ref.strings.php" class="link">string functions section</a> for
   general functions, and the <a href="ref.pcre.php" class="link">Perl-compatible regular
   expression functions</a> for advanced find &amp; replace functionality.
  </p>

  <p class="simpara">
   There are also <a href="ref.url.php" class="link">functions for URL strings</a>, and
   functions to encrypt/decrypt strings
   (<a href="ref.sodium.php" class="link">Sodium</a> and
   <a href="ref.hash.php" class="link">Hash</a>).
  </p>

  <p class="simpara">
   Finally, see also the <a href="ref.ctype.php" class="link">character type
   functions</a>.
  </p>
 </div>

 <div class="sect2" id="language.types.string.casting">
  <h3 class="title">Converting to string</h3>

  <p class="para">
   A value can be converted to a <span class="type"><a href="language.types.string.php" class="type string">string</a></span> using the
   <code class="literal">(string)</code> cast or the <span class="function"><a href="function.strval.php" class="function">strval()</a></span> function.
   <span class="type"><a href="language.types.string.php" class="type String">String</a></span> conversion is automatically done in the scope of an
   expression where a <span class="type"><a href="language.types.string.php" class="type string">string</a></span> is needed. This happens when using the
   <span class="function"><a href="function.echo.php" class="function">echo</a></span> or <span class="function"><a href="function.print.php" class="function">print</a></span> functions, or when a
   variable is compared to a <span class="type"><a href="language.types.string.php" class="type string">string</a></span>. The sections on
   <a href="language.types.php" class="link">Types</a> and
   <a href="language.types.type-juggling.php" class="link">Type Juggling</a> will make
   the following clearer. See also the <span class="function"><a href="function.settype.php" class="function">settype()</a></span> function.
  </p>

  <p class="para">
   A <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> value is converted to the <span class="type"><a href="language.types.string.php" class="type string">string</a></span>
   <code class="literal">&quot;1&quot;</code>. <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> is converted to
   <code class="literal">&quot;&quot;</code> (the empty string). This allows conversion back and
   forth between <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span> and <span class="type"><a href="language.types.string.php" class="type string">string</a></span> values.
  </p>

  <p class="para">
   An <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> or <span class="type"><a href="language.types.float.php" class="type float">float</a></span> is converted to a
   <span class="type"><a href="language.types.string.php" class="type string">string</a></span> representing the number textually (including the
   exponent part for <span class="type"><a href="language.types.float.php" class="type float">float</a></span>s). Floating point numbers can be
   converted using exponential notation (<code class="literal">4.1E+6</code>).
  </p>

  <blockquote class="note"><p><strong class="note">Зауваження</strong>: 
   <p class="para">
    As of PHP 8.0.0, the decimal point character is always
    a period (&quot;<code class="literal">.</code>&quot;). Prior to PHP 8.0.0,
    the decimal point character is defined in the script&#039;s locale (category
    LC_NUMERIC). See the <span class="function"><a href="function.setlocale.php" class="function">setlocale()</a></span> function.
   </p>
  </p></blockquote>

  <p class="para">
   <span class="type"><a href="language.types.array.php" class="type Array">Array</a></span>s are always converted to the <span class="type"><a href="language.types.string.php" class="type string">string</a></span>
   <code class="literal">&quot;Array&quot;</code>; because of this, <span class="function"><a href="function.echo.php" class="function">echo</a></span> and
   <span class="function"><a href="function.print.php" class="function">print</a></span> can not by themselves show the contents of an
   <span class="type"><a href="language.types.array.php" class="type array">array</a></span>. To view a single element, use a construction such as
   <code class="literal">echo $arr[&#039;foo&#039;]</code>. See below for tips on viewing the entire
   contents.
  </p>

  <p class="para">
   In order to convert <span class="type"><a href="language.types.object.php" class="type object">object</a></span>s to <span class="type"><a href="language.types.string.php" class="type string">string</a></span>, the magic
   method <a href="language.oop5.magic.php" class="link">__toString</a> must be used.
  </p>

  <p class="para">
   <span class="type"><a href="language.types.resource.php" class="type Resource">Resource</a></span>s are always converted to <span class="type"><a href="language.types.string.php" class="type string">string</a></span>s with the
   structure <code class="literal">&quot;Resource id #1&quot;</code>, where <code class="literal">1</code>
   is the resource number assigned to the <span class="type"><a href="language.types.resource.php" class="type resource">resource</a></span> by PHP at
   runtime. While the exact structure of this string should not be relied on
   and is subject to change, it will always be unique for a given resource
   within the lifetime of a script being executed (ie a Web request or CLI
   process) and won&#039;t be reused. To get a <span class="type"><a href="language.types.resource.php" class="type resource">resource</a></span>&#039;s type, use
   the <span class="function"><a href="function.get-resource-type.php" class="function">get_resource_type()</a></span> function.
  </p>

  <p class="para">
   <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> is always converted to an empty string.
  </p>

  <p class="para">
   As stated above, directly converting an <span class="type"><a href="language.types.array.php" class="type array">array</a></span>,
   <span class="type"><a href="language.types.object.php" class="type object">object</a></span>, or <span class="type"><a href="language.types.resource.php" class="type resource">resource</a></span> to a <span class="type"><a href="language.types.string.php" class="type string">string</a></span> does
   not provide any useful information about the value beyond its type. See the
   functions <span class="function"><a href="function.print-r.php" class="function">print_r()</a></span> and <span class="function"><a href="function.var-dump.php" class="function">var_dump()</a></span> for
   more effective means of inspecting the contents of these types.
  </p>

  <p class="para">
   Most PHP values can also be converted to <span class="type"><a href="language.types.string.php" class="type string">string</a></span>s for permanent
   storage. This method is called serialization, and is performed by the
   <span class="function"><a href="function.serialize.php" class="function">serialize()</a></span> function.
  </p>

 </div>

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

  <h3 class="title">Details of the String Type</h3>

  <p class="para">
   The <span class="type"><a href="language.types.string.php" class="type string">string</a></span> in PHP is implemented as an array of bytes and an
   integer indicating the length of the buffer. It has no information about how
   those bytes translate to characters, leaving that task to the programmer.
   There are no limitations on the values the string can be composed of; in
   particular, bytes with value <code class="literal">0</code> (“NUL bytes”) are allowed
   anywhere in the string (however, a few functions, said in this manual not to
   be “binary safe”, may hand off the strings to libraries that ignore data
   after a NUL byte.)
  </p>
  <p class="para">
   This nature of the string type explains why there is no separate “byte” type
   in PHP – strings take this role. Functions that return no textual data – for
   instance, arbitrary data read from a network socket – will still return
   strings.
  </p>
  <p class="para">
   Given that PHP does not dictate a specific encoding for strings, one might
   wonder how string literals are encoded. For instance, is the string
   <code class="literal">&quot;á&quot;</code> equivalent to <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) or any other possible
   representation? The answer is that string will be encoded in whatever fashion
   it is encoded in the script file. Thus, if the script is written in
   ISO-8859-1, the string will be encoded in ISO-8859-1 and so on. However,
   this does not apply if Zend Multibyte is enabled; in that case, the script
   may be written in an arbitrary encoding (which is explicitly declared or is
   detected) and then converted to a certain internal encoding, which is then
   the encoding that will be used for the string literals.
   Note that there are some constraints on the encoding of the script (or on the
   internal encoding, should Zend Multibyte be enabled) – this almost always
   means that this encoding should be a compatible superset of ASCII, such as
   UTF-8 or ISO-8859-1. Note, however, that state-dependent encodings where
   the same byte values can be used in initial and non-initial shift states
   may be problematic.
  </p>
  <p class="para">
   Of course, in order to be useful, functions that operate on text may have to
   make some assumptions about how the string is encoded. Unfortunately, there
   is much variation on this matter throughout PHP’s functions:
  </p>
  <ul class="itemizedlist">
   <li class="listitem">
    <span class="simpara">
     Some functions assume that the string is encoded in some (any) single-byte
     encoding, but they do not need to interpret those bytes as specific
     characters. This is case of, for instance, <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> or
     <span class="function"><a href="function.strcmp.php" class="function">strcmp()</a></span>. Another way to think of these functions is
     that operate on memory buffers, i.e., they work with bytes and byte
     offsets.
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     Other functions are passed the encoding of the string, possibly they also
     assume a default if no such information is given. This is the case of
     <span class="function"><a href="function.htmlentities.php" class="function">htmlentities()</a></span> and the majority of the
     functions in the <a href="book.mbstring.php" class="link">mbstring</a> extension.
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     Others use the current locale (see <span class="function"><a href="function.setlocale.php" class="function">setlocale()</a></span>), but
     operate byte-by-byte.
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     Finally, they may just assume the string is using a specific encoding,
     usually UTF-8. This is the case of most functions in the
     <a href="book.intl.php" class="link">intl</a> extension and in the
     <a href="book.pcre.php" class="link">PCRE</a> extension
     (in the last case, only when the <code class="literal">u</code> modifier is used).
    </span>
   </li>
  </ul>

  <p class="para">
   Ultimately, this means writing correct programs using Unicode depends on
   carefully avoiding functions that will not work and that most likely will
   corrupt the data and using instead the functions that do behave correctly,
   generally from the <a href="book.intl.php" class="link">intl</a> and
   <a href="book.mbstring.php" class="link">mbstring</a> extensions.
   However, using functions that can handle Unicode encodings is just the
   beginning. No matter the functions the language provides, it is essential to
   know the Unicode specification. For instance, a program that assumes there is
   only uppercase and lowercase is making a wrong assumption.
  </p>
 </div>
</div><?php manual_footer($setup); ?>