<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/language.variables.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'ru',
  ),
  'this' => 
  array (
    0 => 'language.variables.basics.php',
    1 => 'Основы',
    2 => 'Основы',
  ),
  'up' => 
  array (
    0 => 'language.variables.php',
    1 => 'Переменные',
  ),
  'prev' => 
  array (
    0 => 'language.variables.php',
    1 => 'Переменные',
  ),
  'next' => 
  array (
    0 => 'language.variables.predefined.php',
    1 => 'Предопределённые переменные',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'ru',
    'path' => 'language/variables.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="language.variables.basics" class="sect1">
  <h2 class="title">Основы</h2>

  <p class="simpara">
   Переменные в PHP обозначаются знаком доллара, за которым идёт
   имя переменной. Имя переменной чувствительно к регистру.
  </p>

  <p class="para">
   Правильное название переменной начинается с буквы в диапазонах
   <code class="literal">A-Z</code> или <code class="literal">a-z</code>, ASCII-символа в диапазоне со 128-го по 255-й
   байт или символа подчёркивания. Затем идёт произвольное количество букв, цифр или подчёркиваний.
   В виде регулярного выражения правило именования переменных выражалось бы вот так:
   <code class="code">^[a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*$</code>
  </p>

  <blockquote class="note"><p><strong class="note">Замечание</strong>: 
   <span class="simpara">
    PHP не поддерживает названия переменных в Юникоде, однако, отдельные кодировки
    символов наподобие UTF-8 кодируют символы так, что каждый байт многобайтового символа
    попадает в допустимый диапазон, поэтому такое название переменной
    становится допустимым.
   </span>
  </p></blockquote>

  <blockquote class="note"><p><strong class="note">Замечание</strong>: 
   <span class="simpara">
    Переменная <code class="literal">$this</code> — специальная переменная, которой
    нельзя присваивать значение.
    До PHP 7.1.0 было возможно косвенное присваивание (например, через
    <a href="language.variables.variable.php" class="link">переменные переменных</a>).
   </span>
  </p></blockquote>

  <div class="tip"><strong class="tip">Подсказка</strong>
<p class="simpara">
 Смотрите также «<a href="userlandnaming.php" class="xref">Руководство по именованию</a>».
</p>
</div>

   <div class="example" id="example-1">
    <p><strong>Пример #1 Правильные названия переменных</strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br />$var </span><span style="color: #007700">= </span><span style="color: #DD0000">'Боб'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$Var </span><span style="color: #007700">= </span><span style="color: #DD0000">'Джо'</span><span style="color: #007700">;<br />echo </span><span style="color: #DD0000">"</span><span style="color: #0000BB">$var</span><span style="color: #DD0000">, </span><span style="color: #0000BB">$Var</span><span style="color: #DD0000">"</span><span style="color: #007700">;      </span><span style="color: #FF8000">// Инструкция выведет "Боб, Джо"<br /><br /></span><span style="color: #0000BB">$_4site </span><span style="color: #007700">= </span><span style="color: #DD0000">'ещё нет'</span><span style="color: #007700">;    </span><span style="color: #FF8000">// Правильно; название переменной начинается с символа подчёркивания<br /></span><span style="color: #0000BB">$täyte </span><span style="color: #007700">= </span><span style="color: #DD0000">'mansikka'</span><span style="color: #007700">;    </span><span style="color: #FF8000">// Правильно; символ 'ä' — 228-я кодовая точка в кодировке Extended ASCII<br /><br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>

   <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 /><br /></span><span style="color: #007700">$</span><span style="color: #0000BB">4site </span><span style="color: #007700">= </span><span style="color: #DD0000">'not yet'</span><span style="color: #007700">;     </span><span style="color: #FF8000">// Неправильно; название начинается с цифры</span></span></code></div>
    </div>

   </div>

   <p class="simpara">
    PHP принимает последовательность произвольных байтов как названия переменной.
    Названия переменных, которые не соответствуют правилам именования,
    доступны только динамически во время выполнения.
    Раздел «<a href="language.variables.variable.php" class="link">Переменные переменных</a>»
    рассказывает, как получить доступ к переменным переменных.
   </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 /><br /></span><span style="color: #007700">${</span><span style="color: #DD0000">'invalid-name'</span><span style="color: #007700">} = </span><span style="color: #DD0000">'bar'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$name </span><span style="color: #007700">= </span><span style="color: #DD0000">'invalid-name'</span><span style="color: #007700">;<br />echo ${</span><span style="color: #DD0000">'invalid-name'</span><span style="color: #007700">}, </span><span style="color: #DD0000">" "</span><span style="color: #007700">, $</span><span style="color: #0000BB">$name</span><span style="color: #007700">;<br /><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>
bar bar
</pre></div>
    </div>
   </div>

  <p class="para">
   По умолчанию переменные присваиваются по значению. Поэтому
   когда переменной присваивают выражение, значение
   исходного выражения копируется в целевую переменную. Это
   означает, например, что после присваивания значения одной переменной
   другой переменной, изменение одной переменной не повлияет
   на другую. Дополнительную информацию об этом способе присваивания
   смотрите в разделе «<a href="language.expressions.php" class="link">Выражения</a>».
  </p>
  <p class="para">
   PHP также предлагает другой способ присваивания значений переменным:
   <a href="language.references.php" class="link">присваивание по ссылке</a>.
   Это означает, что новая переменная просто ссылается (иначе говоря,
   «становится псевдонимом» или «указывает») на оригинальную
   переменную. Изменения в новой переменной отражаются на оригинале,
   и наоборот.
  </p>
  <p class="para">
   Для присваивания по ссылке к началу имени присваиваемой (исходной) переменной
   просто добавляют амперсанд &amp;. Например,
   следующий фрагмент кода дважды выводит «<code class="literal">Меня зовут Боб</code>»:

   <div class="informalexample">
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br />$foo </span><span style="color: #007700">= </span><span style="color: #DD0000">'Боб'</span><span style="color: #007700">;              </span><span style="color: #FF8000">// Присваивает переменной $foo значение «Боб»<br /></span><span style="color: #0000BB">$bar </span><span style="color: #007700">= &amp;</span><span style="color: #0000BB">$foo</span><span style="color: #007700">;              </span><span style="color: #FF8000">// Ссылка на значение переменной $foo через переменную $bar<br /></span><span style="color: #0000BB">$bar </span><span style="color: #007700">= </span><span style="color: #DD0000">"Меня зовут </span><span style="color: #0000BB">$bar</span><span style="color: #DD0000">"</span><span style="color: #007700">;  </span><span style="color: #FF8000">// Изменение значения переменной $bar...<br /></span><span style="color: #007700">echo </span><span style="color: #0000BB">$bar</span><span style="color: #007700">;<br />echo </span><span style="color: #0000BB">$foo</span><span style="color: #007700">;                 </span><span style="color: #FF8000">// ...меняет и значение переменной $foo<br /><br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
  </p>

  <p class="para">
   Важно отметить, что по ссылке присваиваются только переменные.
   <div class="informalexample">
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br />$foo </span><span style="color: #007700">= </span><span style="color: #0000BB">25</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$bar </span><span style="color: #007700">= &amp;</span><span style="color: #0000BB">$foo</span><span style="color: #007700">;      </span><span style="color: #FF8000">// Это верное присваивание<br /></span><span style="color: #0000BB">$bar </span><span style="color: #007700">= &amp;(</span><span style="color: #0000BB">24 </span><span style="color: #007700">* </span><span style="color: #0000BB">7</span><span style="color: #007700">);  </span><span style="color: #FF8000">// Неверно; ссылка на неименованное выражение<br /><br /></span><span style="color: #007700">function </span><span style="color: #0000BB">test</span><span style="color: #007700">()<br />{<br />   return </span><span style="color: #0000BB">25</span><span style="color: #007700">;<br />}<br /><br /></span><span style="color: #0000BB">$bar </span><span style="color: #007700">= &amp;</span><span style="color: #0000BB">test</span><span style="color: #007700">();    </span><span style="color: #FF8000">// Неверно, потому что функция test() не возвращает переменную по ссылке<br /><br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
  </p>

  <p class="para">
   PHP не требует объявлять переменные, хотя рекомендует.
   Доступ к неопределённой переменной до PHP 8.0.0 выдавал
   уведомление <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>.
   Неопределённая переменная по умолчанию содержит значение <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong>.
   Языковая конструкция <span class="function"><a href="function.isset.php" class="function">isset()</a></span> помогает определить,
   инициализировали ли переменную; конструкция считает переменную инициализированной,
   если значение переменной не равняется <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong>.
  </p>
  <p class="para">
   <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 /><br /></span><span style="color: #FF8000">// Пример переменной, которую не установили и (!) не упомянули в строковом,<br />// логическом, целочисленном или другом контексте<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$unset_var</span><span style="color: #007700">);<br /><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>
Warning: Undefined variable $unset_var in ...
NULL
</pre></div>
     </div>
   </div>
  </p>

   <p class="simpara">
    PHP разрешает автовивификацию массивов из неопределённых переменных.
    Автовивификация (букв.: автоматическое оживление) — операция, при которой
    новый массив создаётся автоматически при добавлении в него значения.
    Добавление элемента к неопределенной переменной создаст новый массив
    и не вызовет предупреждения.
   </p>
   <div class="example" id="example-5">
    <p><strong>Пример #5 Автовивификация массива из неопределённой переменной</strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br />$unset_array</span><span style="color: #007700">[] = </span><span style="color: #DD0000">'value'</span><span style="color: #007700">; </span><span style="color: #FF8000">// Предупреждение не выдаётся<br /><br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>

   <div class="warning"><strong class="warning">Внимание</strong>
    <p class="simpara">
     Нельзя рассчитывать, что неинициализированная переменная сохранит значение по умолчанию
     при включении одного файла в другой, поскольку появляется риск того, что неинициализированная переменная
     получит значение переменной другого файла, если в файлах встретятся переменные с одинаковым названием.
    </p>
   </div>

   <p class="simpara">
    Переменную уничтожают языковой конструкцией <span class="function"><a href="function.unset.php" class="function">unset()</a></span>.
   </p>

   <p class="simpara">
    Подробнее о функциях работы с переменными рассказывает раздел
    «<a href="ref.var.php" class="link">Функции обработки переменных</a>».
   </p>
 </div><?php manual_footer($setup); ?>