Обновление перевода (#701)

This commit is contained in:
Mikhail Alferov
2024-01-15 19:26:18 +03:00
committed by GitHub
parent 221ad82e07
commit 9f00731f3d
7 changed files with 133 additions and 129 deletions

View File

@ -5,9 +5,9 @@
<title>Сессии</title>
<para>
Сессии PHP представляют собой различные способы сохранения данных для дальнейшего доступа к ним.
Они позволяют создавать более гибкие приложения и улучшают привлекательность вашего сайта.
Подробная информация находится в <link linkend="book.session">справочнике сессий</link>.
Поддержка сессий в PHP состоит в сохранении набора данных для повторного обращения к ним.
Это помогает повысить индивидуальность разрабатываемого приложения и улучшает привлекательность сайта.
Подробнее об этом рассказано в разделе «<link linkend="book.session">Управление сессиями</link>».
</para>
</chapter>

View File

@ -36,7 +36,7 @@
<!ENTITY CalendarandEventRelatedExtensions "Модули для работы с датой и временем">
<!ENTITY NonTextMIMEOutput "Генерация нетекстовых MIME-форматов">
<!ENTITY ImageProcessingandGeneration "Обработка и генерация изображений">
<!ENTITY AudioFormatsManipulation "Обработка аудио форматов">
<!ENTITY AudioFormatsManipulation "Обработка аудиоформатов">
<!ENTITY CommandLineSpecificExtensions "Модули для работы с командной строкой">
<!ENTITY WindowsOnlyExtensions "Модули только для Windows">
<!ENTITY ServerSpecificExtensions "Модули для работы с серверами">

View File

@ -4,32 +4,33 @@
<chapter xml:id="language.expressions" xmlns="http://docbook.org/ns/docbook">
<title>Выражения</title>
<simpara>
Выражения — это самые важные строительные элементы PHP. Почти всё, что вы пишете
в PHP, является выражением. Самое простое и точное определение
выражения — «все что угодно, имеющее значение».
Выражения — это самые важные строительные элементы PHP. Почти всё, что разработчик пишет
в PHP, выражение. Самое простое и точное определение
выражения — «всё, у чего есть значение».
</simpara>
<simpara>
Основными формами выражений являются константы и переменные. Если
вы записываете <code>$a = 5</code>, вы присваиваете <code>5</code> переменной
<varname>$a</varname>. <code>5</code>, очевидно, имеет значение 5 или, другими словами,
Основные формы выражений — это константы и переменные. Если
записать <code>$a = 5</code>, значение <code>5</code> будет присвоено переменной
<varname>$a</varname>. У значения <code>5</code>, очевидно, значение 5 или, говоря по-другому,
<code>5</code> — это выражение со значением 5 (в данном случае <code>5</code> — это целочисленная
константа).
</simpara>
<simpara>
После этого присвоения вы ожидаете, что значением <varname>$a</varname>
также является 5, поэтому, если вы написали <code>$b = $a</code>,
вы полагаете, что работать это будет так же, как
если бы вы написали <code>$b = 5</code>. Другими словами,
<varname>$a</varname> это также выражение со значением 5. Если всё работает
верно, то именно так и произойдёт.
После этого присвоения ожидается, что значение переменной <varname>$a</varname>
тоже равно 5, поэтому, если написано <code>$b = $a</code>,
ожидается, что работать это будет так же, как
если бы было написано <code>$b = 5</code>. Говоря по-другому,
переменная <varname>$a</varname> это также выражение со значением 5. Если всё работает
верно, то так и произойдёт.
</simpara>
<para>
Немного более сложными примерами выражений являются функции. Например,
рассмотрим следующую функцию:
Немного более сложные примеры выражений — это функции. Например,
рассмотрим следующую функцию:
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
function foo ()
{
return 5;
@ -40,94 +41,94 @@ function foo ()
</informalexample>
</para>
<simpara>
Исходя из того, что вы хорошо знакомы с концепцией функций (если нет,
то прочитайте главу о <link linkend="language.functions">функциях</link>), вы
полагаете, что запись <code>$c = foo()</code> абсолютно
эквивалентна записи <code>$c = 5</code>, и вы правы. Функции -
это выражения, значением которых является то, что возвращает функция.
Поскольку <code>foo()</code> возвращает 5, значением выражения
'<code>foo()</code>' является 5.
Как правило, функции возвращают не просто статическое значение, а
что-то вычисляют.
Опираясь на то, что разработчик знаком принципом работы функций (если нет,
рекомендовано прочитать главу <link linkend="language.functions">о функциях</link>),
он может предположить, что напечатать <code>$c = foo()</code>
по смыслу то же, что написать <code>$c = 5</code>, и будет прав. Функции
это выражения, значение которых то, что возвращает функция.
Поскольку функция <code>foo()</code> возвращает 5, значением выражения
«<code>foo()</code>» будет 5.
Обычно функции не просто возвращают статическое значение,
а что-то вычисляют.
</simpara>
<simpara>
Разумеется, значения в PHP не обязаны быть целочисленными, и очень
часто ими не являются. PHP поддерживает четыре типа скалярных значений:
целочисленные (<type>int</type>), с плавающей точкой (<type>float</type>),
Конечно, значения в PHP не обязаны быть целочисленными, и очень
часто это не так. Язык PHP поддерживает четыре типа скалярных значений:
целочисленные значения (<type>int</type>), значения с плавающей точкой (<type>float</type>),
строковые (<type>string</type>) и логические (<type>bool</type>)
значения (скалярными являются значения, которые вы не можете 'разбить' на
значения (скалярные значения это те, которые нельзя «разбить» на
меньшие части, в отличие, например, от массивов). PHP поддерживает также два
комбинированных (не скалярных) типа: массивы и объекты. Любое значение такого
типа может присваиваться переменной или возвращаться функцией.
сложных (составных, композитных нескалярных) типа: массивы и объекты. Каждое из этих
типов значений разрешено присваивать переменной или возвращать функцией.
</simpara>
<simpara>
Однако PHP, как и многие другие языки, понимает гораздо больше выражений.
PHP — это язык, ориентированный на выражения и рассматривающий почти все как
выражение. Вернёмся к примеру, с которым мы уже имели дело:
<code>$a = 5</code>. Легко заметить, что здесь присутствуют два значения —
Однако PHP использует выражения значительно шире, точно так же, как это делают другие языки.
PHP — это язык с ориентацией на выражения, который почти всё в коде рассматривает как
выражение. Вернёмся к тому примеру, с которым мы уже имели дело:
<code>$a = 5</code>. Легко заметить, что здесь есть два значения —
значение целочисленной константы <code>5</code> и значение переменной <varname>$a</varname>,
также принимающей значение 5. Но на самом деле здесь присутствует и ещё одно
также принимающей значение 5. Но, хотя это неочевидно, здесь есть ещё одно
значение — значение самого присвоения. Само присвоение вычисляется в
присвоенное значение, в данном случае — в 5. На практике это означает, что
<code>$a = 5</code>, независимо от того, что оно делает, является
выражением со значением 5. Таким образом, запись <code>$b = ($a = 5)</code>
равносильна записи <code>$a = 5; $b = 5;</code> (точка с запятой обозначает конец выражения).
Поскольку операции присвоения анализируются справа налево, вы также
можете написать <code>$b = $a = 5</code>.
присвоенное значение, в данном случае — в 5. То есть
выражение <code>$a = 5</code>, независимо от того, что оно делает,
это выражение со значением 5. Поэтому запись <code>$b = ($a = 5)</code>
равносильна записи <code>$a = 5; $b = 5;</code> (точка с запятой означает конец выражения).
Поскольку операции присвоения анализируются справа налево, также
разрешено написать <code>$b = $a = 5</code>.
</simpara>
<simpara>
Другой хороший пример ориентированности на выражения — префиксный и
постфиксный инкремент и декремент. Пользователи PHP и многих
других языков возможно уже знакомы с формой записи <code>variable++</code>
постфиксный инкремент и декремент. Пользователи PHP
и других языков возможно уже знакомы с формой записи <code>variable++</code>
и <code>variable--</code>. Это <link linkend="language.operators.increment">
операторы инкремента и декремента</link>. Также как и C, PHP
операторы инкремента и декремента</link>. Как и язык Си, язык PHP
поддерживает два типа инкремента — префиксный и постфиксный. Они
оба инкрементируют значение переменной и эффект их действия на неё
одинаков. Разница состоит в значении выражения инкремента.
Префиксный инкремент, записываемый как <code>++$variable</code>,
вычисляется в инкрементированное значение (PHP инкрементирует переменную до того
как прочесть её значение, отсюда название 'пре-инкремент').
как прочесть её значение, отсюда название «преинкремент»).
Постфиксный инкремент, записываемый как <code>$variable++</code>,
вычисляется в первоначальное значение переменной <varname>$variable</varname> до её приращения
(PHP инкрементирует переменную после прочтения её значения, отсюда
название 'пост-инкремент').
(PHP вначале читает значение переменной и только потом инкрементирует её, отсюда
название «постинкремент»).
</simpara>
<simpara>
Очень распространённым типом выражений являются выражения <link
Распространённые типы выражений — это выражения <link
linkend="language.operators.comparison">сравнения</link>.
Результатом вычислений являются &false; (ложь)
или &true; (истина). PHP поддерживает операции сравнения &gt; (больше), &gt;= (больше
Эти выражения оцениваются либо как &false; (ложь),
либо как &true; (истина). PHP поддерживает операции сравнения &gt; (больше), &gt;= (больше
либо равно), == (равно), != (не равно), &lt; (меньше) и &lt;=
(меньше либо равно). Он также поддерживает операторы строгого
равенства: === (равно и одного типа) и !== (не равно или не одного
типа). Чаще всего эти выражения используются в операторах условного выполнения,
таких как <code>if</code>.
типа). Обычно этими выражениями пользуются в операторах условного выполнения,
например, <code>if</code>.
</simpara>
<simpara>
Последний пример выражений, который мы здесь рассмотрим, это
смешанные выражения операции и присвоения. Вы уже знаете, что если
вы хотите увеличить <varname>$a</varname> на 1, вы можете просто написать
<code>$a++</code> или <code>++$a</code>. Но что, если вы
хотите прибавить больше, чем единицу, например, 3? Вы могли бы написать
<code>$a++</code> много раз, однако, очевидно это не очень
рациональный и удобный способ. Гораздо более распространённой практикой
является запись вида <code>$a = $a + 3</code>.
<code>$a + 3</code> вычисляется в значение <varname>$a</varname> плюс
3 и снова присваивается <varname>$a</varname>, увеличивая в результате
<varname>$a</varname> на 3. В PHP, как и в некоторых других языках, таких как C,
вы можете записать это более коротким образом, что увеличит очевидность смысла
и быстроту понимания кода по прошествии времени. Прибавить 3 к текущему значению
<varname>$a</varname> можно с помощью записи <code>$a += 3</code>.
Это означает дословно "взять значение <varname>$a</varname>, прибавить к
нему 3 и снова присвоить его переменной <varname>$a</varname>". Кроме
Последний пример выражений, который будет здесь рассмотрен, это
смешанные выражения операции и присвоения. Мы уже знаем, что если
нужно увеличить значение переменной <varname>$a</varname> на 1, можно просто написать
<code>$a++</code> или <code>++$a</code>. Но что, если нужно
прибавить больше единицы, например, 3? Можно было бы написать
<code>$a++</code> много раз, однако, очевидно, это не очень
рационально и удобно. Более распространённая практика
запись вида <code>$a = $a + 3</code>.
Выражение <code>$a + 3</code> вычисляется в значение переменной <varname>$a</varname>, к которому
прибавлено 3 и снова присвоено значение переменной <varname>$a</varname>, увеличивая в результате
значение переменной <varname>$a</varname> на 3. В PHP, как и в ряде других языков, например Си,
разрешено записать это более коротким образом, что увеличит очевидность смысла
и скорость понимания кода по прошествии времени. Прибавить 3 к текущему значению
переменной <varname>$a</varname> можно, записав <code>$a += 3</code>.
Это означает дословно «взять значение <varname>$a</varname>, прибавить к
нему 3 и снова присвоить его переменной <varname>$a</varname>». Кроме
большей понятности и краткости, это быстрее работает. Значением
<code>$a += 3</code>, как и обычного присвоения, является присвоенное
выражения <code>$a += 3</code>, как и обычного присвоения, будет присвоенное
значение. Обратите внимание, что это НЕ 3, а суммированное значение
<varname>$a</varname> плюс 3 (то, что было присвоено <varname>$a</varname>).
Таким образом может использоваться любой бинарный оператор, например,
<code>$a -= 5</code> (вычесть 5 из значения <varname>$a</varname>),
<code>$b *= 7</code> (умножить значение <varname>$b</varname> на 7)
и т.д.
переменной <varname>$a</varname> плюс 3 (то, что было присвоено перменной <varname>$a</varname>).
Поэтому разрешено использовать любой бинарный оператор, например,
<code>$a -= 5</code> (вычесть 5 из значения переменной <varname>$a</varname>),
<code>$b *= 7</code> (умножить значение переменной <varname>$b</varname> на 7)
и т. д.
</simpara>
<para>
Существует ещё одно выражение, которое может выглядеть необычно,
@ -139,6 +140,7 @@ function foo ()
<programlisting role="php">
<![CDATA[
<?php
$first ? $second : $third
?>
]]>
@ -146,13 +148,13 @@ $first ? $second : $third
</informalexample>
</para>
<para>
Если значением первого подвыражения является &true; (не ноль),
Если значение первого подвыражения &true; (ненулевое значение),
то выполняется второе подвыражение, которое и будет результатом
условного выражения. В противном случае будет выполнено третье
условного выражения. Или выполняется третье
подвыражение и его значение будет результатом.
</para>
<para>
Следующий пример должен помочь вам немного улучшить понимание
Задача следующего примера помочь немного улучшить понимание
префиксного и постфиксного инкремента и выражений:
</para>
<para>
@ -160,22 +162,24 @@ $first ? $second : $third
<programlisting role="php">
<![CDATA[
<?php
function double($i)
{
return $i*2;
}
$b = $a = 5; /* присвоить значение пять переменным $a и $b */
$c = $a++; /* постфиксный инкремент, присвоить значение $a
(5) переменной $c */
$c = $a++; /* постфиксный инкремент, присвоить значение переменной
$a (5) — переменной $c */
$e = $d = ++$b; /* префиксный инкремент, присвоить увеличенное
значение $b (6) переменным $d и $e */
значение переменной $b (6) переменным $d и $e */
/* в этой точке и $d, и $e равны 6 */
/* в этой точке и переменная $d, и переменная $e равны 6 */
$f = double($d++); /* присвоить удвоенное значение $d перед
инкрементом (2*6 = 12) переменной $f */
$g = double(++$e); /* присвоить удвоенное значение $e после
инкремента (2*7 = 14) переменной $g */
$f = double($d++); /* присвоить удвоенное значение перменной $d перед
инкрементом (2 * 6 = 12) — переменной $f */
$g = double(++$e); /* присвоить удвоенное значение перменной $e после
инкремента (2 * 7 = 14) — переменной $g */
$h = $g += 10; /* сначала переменная $g увеличивается на 10,
приобретая, в итоге, значение 24. Затем значение
присвоения (24) присваивается переменной $h,
@ -186,29 +190,29 @@ $h = $g += 10; /* сначала переменная $g увеличива
</informalexample>
</para>
<simpara>
Некоторые выражения могут рассматриваться как инструкции. В
данном случае инструкция имеет вид '<code>expr ;</code>' — выражение с
последующей точкой с запятой. В записи <code>$b = $a = 5;</code>,
<code>$a = 5</code> — это верное выражение, но само по себе не инструкция.
Тогда как <code>$b = $a = 5;</code> является верной инструкцией.
Иногда выражения рассматриваются как инструкции.
В данном случае у инструкции следующий вид — «<code>expr ;</code>» — выражение со
следующей за ним точкой с запятой. В записи <code>$b = $a = 5;</code>,
<code>$a = 5</code> — это верное выражение, но оно само не инструкция.
Тогда как выражение <code>$b = $a = 5;</code> верная инструкция.
</simpara>
<simpara>
Последнее, что стоит упомянуть, это истинность значения выражений.
Во многих случаях, как правило, в условных операторах и циклах,
вас может интересовать не конкретное значение выражения, а только
Последнее, что нужно вспомнить, это истинность значения выражений.
Обычно в условных операторах и циклах
может интересовать не конкретное значение выражения, а только
его истинность (значение &true; или &false;).
<!-- (PHP doesn't have a
dedicated boolean type) : WRONG, PHP does. -->
Константы &true; и &false; (регистронезависимые) — это два
возможных логических значения. Выражения можно
возможных логических значения. Выражения разрешено
автоматически преобразовать в логическое значение. Подробнее о том, как это
сделать, рассказано в <link linkend="language.types.typecasting">разделе о
приведении типов</link>.
</simpara>
<simpara>
PHP предоставляет полную и мощную реализацию выражений, и их
Язык PHP со всей полнотой и мощностью реализует выражения, и их
полное документирование выходит за рамки этого руководства.
Примеры выше дают представление о выражениях, о том, что
они из себя представляют, и как можно создавать полезные

View File

@ -202,7 +202,7 @@
<term><varname>config</varname></term>
<listitem>
<para>
<emphasis>Устарело</emphasis>. Конфигурация, которую использует при вызове
<emphasis>Устарело</emphasis>. Конфигурация, которая будет использована при вызове
метода <function>DOMDocument::normalizeDocument</function>.
</para>
</listitem>

View File

@ -14,8 +14,8 @@
</methodsynopsis>
<para>
Этот метод выполняет те же действия, как если бы вы сохранили и затем
загрузили документ, приводит документ к "нормальной" форме.
Этот метод работает так, как если бы документ сохранили, а затем
загрузили, — приводит документ к «нормальной» форме.
</para>
</refsect1>

View File

@ -30,7 +30,7 @@ ob_end_flush();
функции <function>ob_end_flush</function>. Тем временем
вызов функции <function>setcookie</function> успешно сохранится в
cookie браузера, не вызывая ошибки (заголовки не получится отправить
в браузер когда данные уже отправлены).
в браузер, когда данные уже отправлены).
</para>
</section>

View File

@ -10,8 +10,8 @@
<preface xml:id="intro.session">
&reftitle.intro;
<para>
Поддержка сессий в PHP заключается в способе сохранения некоторых данных
между несколькими последовательными доступами.
Поддержка сессий в PHP состоит в сохранении набора данных
между последовательными доступами.
</para>
<para>
Каждому посетителю сайта присваивается уникальный идентификатор,
@ -19,54 +19,54 @@
Он хранится либо в cookie на стороне пользователя, либо передаётся через URL.
</para>
<para>
Поддержка сессий позволяет сохранять данные между запросами
в суперглобальном массиве <varname>$_SESSION</varname>. В тот момент, когда посетитель
получает доступ к сайту, PHP проверяет автоматически (если <link
linkend="ini.session.auto-start">session.auto_start</link> установлено в 1)
или по запросу (явным образом через вызов <function>session_start</function>),
был ли определённый идентификатор сессии послан вместе с запросом. Если это так,
Поддержка сессий помогает сохранять данные между запросами
в суперглобальном массиве <varname>$_SESSION</varname>. Когда посетитель заходит
на сайт, PHP автоматически (если для директивы <link
linkend="ini.session.auto-start">session.auto_start</link> установлено значение 1)
или по запросу (явным образом через вызов функции <function>session_start</function>) проверяет,
был ли конкретный идентификатор сессии отправлен вместе с запросом. Если это так,
восстанавливается сохранённое ранее окружение.
</para>
<caution>
<para>
При включённом <link linkend="ini.session.auto-start">
session.auto_start</link> единственным способом помещения объектов в
сессию останется загрузка описаний класса с помощью
<link linkend="ini.auto-prepend-file">auto_prepend_file</link>.
В противном случае придётся выполнить сериализацию
(<function>serialize</function>) и десериализацию
(<function>unserialize</function>) объекта вручную.
Если директива <link linkend="ini.session.auto-start">
session.auto_start</link> включена, то единственный способ поместить объекты
в сессию — это загрузить определение класса этого объекта черер директиву
<link linkend="ini.auto-prepend-file">auto_prepend_file</link>, иначе
придётся выполнить сериализацию
(функцией <function>serialize</function>) и десериализацию
(функцией <function>unserialize</function>) объекта вручную.
</para>
</caution>
<para>
<varname>$_SESSION</varname> (и все зарегистрированные переменные)
сериализуются внутри PHP после выполнения запроса, используя обработчик сериализации, указанный
Суперглобальная переменная <varname>$_SESSION</varname> (и все зарегистрированные переменные)
сериализуются внутри PHP после выполнения запроса, используя обработчик сериализации, заданный
в INI-опции <link linkend="ini.session.serialize-handler">session.serialize_handler</link>.
Зарегистрированные, но неопределённые переменные помечаются как
неопределённые. При последующем доступе они не определяются сессионным
неопределённые. При повторном доступе они не будут определены сессионным
модулем, если пользователь заново не определит их.
</para>
<warning>
<para>
Так как сессионные данные сериализуются, то переменные с типом
Поскольку сессионные данные сериализуются, переменные с типом
<type>resource</type> не могут храниться в сессиях.
</para>
<para>
Обработчики сериализации (<literal>php</literal>
и <literal>php_binary</literal>) наследуют ограничения для register_globals.
Поэтому нельзя использовать числовые или строковые индексы содержащие
и <literal>php_binary</literal>) наследуют ограничения директивы register_globals.
Поэтому нельзя использовать числовые или строковые индексы, содержащие
специальные символы (<literal>|</literal> и <literal>!</literal>).
Их использование приведёт к ошибкам по завершении скрипта.
У <literal>php_serialize</literal> такие ограничения отсутствуют.
Они приведут к ошибкам при завершении работы скрипта.
У обработчика <literal>php_serialize</literal> такие ограничения отсутствуют.
</para>
</warning>
<note>
<para>
При работе с сессиями обратите внимание, что запись в сессии не создаётся
Заметьте, при работе с сессиями запись в сессии не создаётся
до тех пор, пока переменная не будет зарегистрирована
в суперглобальном массиве <varname>$_SESSION</varname>. Это правило
действует вне зависимости от того, была ли сессия запущена
с использованием функции <function>session_start</function>.
будет применяться независимо от того, запускалась ли сессия
функцией <function>session_start</function>.
</para>
</note>
</preface>