mirror of
https://github.com/php/doc-ru.git
synced 2025-08-20 23:31:15 +00:00
Обновление перевода (#670)
This commit is contained in:
@ -6,29 +6,29 @@
|
||||
|
||||
<simpara>
|
||||
PHP не требует явного определения типа при объявлении переменной.
|
||||
В этом случае тип переменной определяется значением, которое она хранит.
|
||||
Если тип переменной не указан, он будет определён значением, которое она хранит.
|
||||
То есть, если переменной <varname>$var</varname> присваивается значение типа строка (<type>string</type>), то
|
||||
<varname>$var</varname> изменит тип на строку (<type>string</type>).
|
||||
Если после этого переменной <varname>$var</varname> будет присвоено значение типа целое число (<type>int</type>), то она изменит тип на целое число (<type>int</type>).
|
||||
</simpara>
|
||||
|
||||
<para>
|
||||
В определённых контекстах PHP может попытаться автоматически преобразовать тип значения в другой. Существуют следующие различные контексты:
|
||||
В ряде контекстов PHP может попытаться автоматически преобразовать тип значения в другой. Существующие контексты:
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<simpara>Числовой контекст</simpara>
|
||||
<simpara>Числовой</simpara>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<simpara>Строчный контекст</simpara>
|
||||
<simpara>Строчный</simpara>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<simpara>Логический контекст</simpara>
|
||||
<simpara>Логический</simpara>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<simpara>Контекст целых чисел и строк</simpara>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<simpara>Сравнительный контекст</simpara>
|
||||
<simpara>Сравнительный</simpara>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<simpara>Контекст функций</simpara>
|
||||
@ -43,25 +43,28 @@
|
||||
</note>
|
||||
|
||||
<simpara>
|
||||
Чтобы принудительно установить тип переменной, смотрите раздел <link linkend="language.types.typecasting">Приведение типа</link>.
|
||||
Чтобы изменить тип переменной, смотрите описание функции <function>settype</function>.
|
||||
О том, как принудительно установить тип переменной, рассказано в разделе
|
||||
«<link linkend="language.types.typecasting">Приведение типа</link>».
|
||||
О том, как изменить тип переменной, рассказано в описании функции <function>settype</function>.
|
||||
</simpara>
|
||||
|
||||
<sect2>
|
||||
<title>Числовой контекст</title>
|
||||
|
||||
<simpara>
|
||||
Контекст при использовании
|
||||
<link linkend="language.operators.arithmetic">арифметического оператора</link>.
|
||||
Числовой контекст возникает при работе с
|
||||
<link linkend="language.operators.arithmetic">арифметическими операторами</link>.
|
||||
</simpara>
|
||||
|
||||
<simpara>
|
||||
В данном контексте, если один из операндов является числом с плавающей точкой (<type>float</type>) (или не интерпретируется как целое число (<type>int</type>)),
|
||||
В этом контексте, если один из операндов — число с плавающей точкой (<type>float</type>)
|
||||
(или не интерпретируется как целое число (<type>int</type>)),
|
||||
оба операнда интерпретируются как число с плавающей точкой (<type>float</type>)
|
||||
и результатом будет число с плавающей точкой (<type>float</type>).
|
||||
В противном случае операнды будут интерпретированы как целое число (<type>int</type>)
|
||||
и результатом также будет целое число (<type>int</type>).
|
||||
Начиная с PHP 8.0.0, если один из операндов не может быть интерпретирован, выбрасывается ошибка <classname>TypeError</classname>.
|
||||
Начиная с PHP 8.0.0, если один из операндов не может быть интерпретирован,
|
||||
выбрасывается исключение <classname>TypeError</classname>.
|
||||
</simpara>
|
||||
</sect2>
|
||||
|
||||
@ -69,14 +72,14 @@
|
||||
<title>Строчный контекст</title>
|
||||
|
||||
<simpara>
|
||||
Контекст при использовании функций <function>echo</function>,
|
||||
<function>print</function>, <link linkend="language.types.string.parsing">интерполяции строк</link>
|
||||
или строкового <link linkend="language.operators.string">оператора конкатенации</link>.
|
||||
Строчный контекст возникает при работе с языковыми конструкциями <function>echo</function>,
|
||||
<function>print</function>, при <link linkend="language.types.string.parsing">интерполяции строк</link>
|
||||
или строковом <link linkend="language.operators.string">операторе конкатенации</link>.
|
||||
</simpara>
|
||||
|
||||
<simpara>
|
||||
В данном контексте значение будет интерпретироваться как строка (<type>string</type>).
|
||||
Если значение не может быть интерпретировано, выбрасывается ошибка <classname>TypeError</classname>.
|
||||
В этом контексте значение будет интерпретироваться как строка (<type>string</type>).
|
||||
Если значение не может быть интерпретировано, выбрасывается исключение <classname>TypeError</classname>.
|
||||
До версии PHP 7.4.0 выдавалась ошибка уровня <constant>E_RECOVERABLE_ERROR</constant>.
|
||||
</simpara>
|
||||
</sect2>
|
||||
@ -85,7 +88,9 @@
|
||||
<title>Логический контекст</title>
|
||||
|
||||
<simpara>
|
||||
Контекст при использовании условных операторов, <link linkend="language.operators.comparison.ternary">тернарного оператора</link> или <link linkend="language.operators.logical">логического оператора</link>.
|
||||
Логический контекст возникает при работе с условными операторами,
|
||||
<link linkend="language.operators.comparison.ternary">тернарным оператором</link>
|
||||
или <link linkend="language.operators.logical">логическим оператором</link>.
|
||||
</simpara>
|
||||
|
||||
<simpara>
|
||||
@ -97,14 +102,17 @@
|
||||
<title>Контекст целых чисел и строк</title>
|
||||
|
||||
<simpara>
|
||||
Контекст при использовании <link linkend="language.operators.bitwise">побитовых операторов</link>.
|
||||
Контекст целых чисел и строк возникает
|
||||
при работе с <link linkend="language.operators.bitwise">побитовыми операторами</link>.
|
||||
</simpara>
|
||||
|
||||
<simpara>
|
||||
В данном контексте, если у всех операндов тип строка (<type>string</type>), результат также будет строкой (<type>string</type>).
|
||||
В этом контексте, если у всех операндов тип строка (<type>string</type>),
|
||||
результат также будет строкой (<type>string</type>).
|
||||
В противном случае операнды будут интерпретированы как целое число (<type>int</type>)
|
||||
и результат также будет целым числом (<type>int</type>).
|
||||
Начиная с PHP 8.0.0, если один из операндов не может быть интерпретирован, то будет выброшена ошибка <classname>TypeError</classname>.
|
||||
Начиная с PHP 8.0.0, если один из операндов не может быть интерпретирован,
|
||||
то будет выброшено исключение <classname>TypeError</classname>.
|
||||
</simpara>
|
||||
</sect2>
|
||||
|
||||
@ -112,11 +120,14 @@
|
||||
<title>Сравнительный контекст</title>
|
||||
|
||||
<simpara>
|
||||
Контекст при использовании <link linkend="language.operators.comparison">оператора сравнения</link>.
|
||||
Сравнительный контекст возникает при работе
|
||||
с <link linkend="language.operators.comparison">операторами сравнения</link>.
|
||||
</simpara>
|
||||
|
||||
<simpara>
|
||||
Преобразования типов, которые происходят в этом контексте, объясняются в <link linkend="language.operators.comparison.types">таблице сравнения различных типов</link> раздела Операторы сравнения.
|
||||
Преобразования типов, которые происходят в этом контексте, объяснены
|
||||
в <link linkend="language.operators.comparison.types">таблице сравнения типов</link>
|
||||
раздела «Операторы сравнения».
|
||||
</simpara>
|
||||
</sect2>
|
||||
|
||||
@ -124,22 +135,25 @@
|
||||
<title>Контекст функций</title>
|
||||
|
||||
<simpara>
|
||||
Контекст, когда значение передаётся типизированному параметру, свойству или возвращается из функции, в которой объявлен тип возвращаемого значения.
|
||||
Контекст функций возникает, когда значение передаётся типизированному параметру,
|
||||
свойству или возвращается из функции, в которой объявлен тип возвращаемого значения.
|
||||
</simpara>
|
||||
|
||||
<para>
|
||||
В этом контексте значение должно быть значением данного типа.
|
||||
Существуют два исключения, первое: если тип значения – целое число (<type>int</type>),
|
||||
а объявленный тип — число с плавающей точкой (<type>float</type>), то целое число преобразуется в число с плавающей точкой.
|
||||
Второй: если объявленный тип является <emphasis>скалярным</emphasis> типом, значение преобразуется в скалярный тип
|
||||
и режим строгой типизации активен (по умолчанию), значение может быть преобразовано в допустимое скалярное значение.
|
||||
Описание такого поведения смотрите ниже.
|
||||
В этом контексте значение должно быть значением типа.
|
||||
Есть два исключения, первое: если тип значения — целое число (<type>int</type>),
|
||||
а объявленный тип — число с плавающей точкой (<type>float</type>),
|
||||
то целое число преобразовывается в число с плавающей точкой.
|
||||
Второй: если объявленный тип — это <emphasis>скалярный</emphasis> тип,
|
||||
значение преобразуемо в скалярный тип и режим строгой типизации активен (по умолчанию),
|
||||
значение может быть преобразовано в допустимое скалярное значение.
|
||||
Описание такого поведения дано ниже.
|
||||
</para>
|
||||
|
||||
<warning>
|
||||
<simpara>
|
||||
<link linkend="functions.internal">Встроенные функции</link> автоматически подставляют &null; к скалярным типам,
|
||||
это поведение <emphasis>УСТАРЕЛО</emphasis> в PHP 8.1.0.
|
||||
это поведение <emphasis>УСТАРЕЛО</emphasis> с PHP 8.1.0.
|
||||
</simpara>
|
||||
</warning>
|
||||
|
||||
@ -154,15 +168,15 @@
|
||||
<listitem>
|
||||
<simpara>
|
||||
Объявление типа <type>int</type>: значение интерпретируется как целое число (<type>int</type>),
|
||||
если преобразование хорошо определено. Например, строка является
|
||||
<link linkend="language.types.numeric-strings">числовой строкой</link>.
|
||||
если преобразование надёжно определимо. Например, когда строка —
|
||||
<link linkend="language.types.numeric-strings">числовая строка</link>.
|
||||
</simpara>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<simpara>
|
||||
Объявление типа <type>float</type>: значение интерпретируется как число с плавающей точкой (<type>float</type>)
|
||||
если преобразование хорошо определено. Например, строка является
|
||||
<link linkend="language.types.numeric-strings">числовой строкой</link>.
|
||||
Объявление типа <type>float</type>: значение интерпретируется как число с плавающей точкой (<type>float</type>),
|
||||
если преобразование надёжно определимо. Например, когда строка —
|
||||
<link linkend="language.types.numeric-strings">числовая строка</link>.
|
||||
</simpara>
|
||||
</listitem>
|
||||
<listitem>
|
||||
@ -176,10 +190,10 @@
|
||||
<sect3 xml:id="language.types.type-juggling.function.union">
|
||||
<title>Принудительная типизация с объединением типов</title>
|
||||
<para>
|
||||
При выключенном <literal>strict_types</literal>, объявления скалярных типов
|
||||
подвергаются ограниченному неявному приведению типов.
|
||||
Если точный тип значения не является частью объединения,
|
||||
то целевой тип выбирается в следующем порядке предпочтения:
|
||||
Когда директива <literal>strict_types</literal> не включена, объявления скалярных типов
|
||||
подлежат ограниченному неявному приведению типов.
|
||||
Если точный тип значения — не часть объединения,
|
||||
то целевой тип выбран из списка в порядке убывания приоритета:
|
||||
|
||||
<orderedlist>
|
||||
<listitem>
|
||||
@ -205,25 +219,26 @@
|
||||
</orderedlist>
|
||||
|
||||
Если тип и существует в объединении и значение может быть приведено к этому типу
|
||||
в соответствии с существующей семантикой проверки типов PHP, то выбирается этот тип.
|
||||
В противном случае выбирается следующий тип.
|
||||
в соответствии с существующей семантикой проверки типов PHP, то PHP выбирает этот тип.
|
||||
В противном случае будет выбран следующий по порядку тип.
|
||||
</para>
|
||||
|
||||
<caution>
|
||||
<para>
|
||||
В качестве исключения, если значение является строкой,
|
||||
а целое число (int) и число с плавающей точкой (float) являются частью объединения,
|
||||
предпочтительный тип определяется существующей семантикой <link linkend="language.types.numeric-strings">числовой строки</link>.
|
||||
Например, для <literal>"42"</literal> выбирается целое число (<type>int</type>),
|
||||
а для <literal>"42.0"</literal> выбирается число с плавающей точкой (<type>float</type>).
|
||||
В качестве исключения, если значение — строка,
|
||||
а целое число (int) и число с плавающей точкой (float) — это часть объединения,
|
||||
предпочтительный тип будет определён существующей семантикой
|
||||
<link linkend="language.types.numeric-strings">числовой строки</link>.
|
||||
Например, для <literal>«42»</literal> PHP выбирает целое число (<type>int</type>),
|
||||
а для <literal>«42.0»</literal> — число с плавающей точкой (<type>float</type>).
|
||||
</para>
|
||||
</caution>
|
||||
|
||||
<note>
|
||||
<para>
|
||||
Типы, не входящие в приведённый выше список предпочтений, не являются объектами
|
||||
для неявного приведения. В частности, не происходит неявного приведения
|
||||
к типам <type>null</type>, <type>false</type> и <type>true</type>.
|
||||
Типы, которые не входят в список предпочтений, не станут целями
|
||||
для неявного приведения. Говоря конкретнее, никакого неявного приведения к типам
|
||||
<type>null</type>, <type>false</type> и <type>true</type> не будет.
|
||||
</para>
|
||||
</note>
|
||||
|
||||
@ -232,6 +247,7 @@
|
||||
<programlisting role="php">
|
||||
<![CDATA[
|
||||
<?php
|
||||
|
||||
// int|string
|
||||
42 --> 42 // точный тип
|
||||
"42" --> "42" // точный тип
|
||||
@ -272,47 +288,48 @@ true --> 1 // bool совместимый с int
|
||||
<programlisting role="php">
|
||||
<![CDATA[
|
||||
<?php
|
||||
$foo = 10; // $foo - это целое число
|
||||
$bar = (bool) $foo; // $bar - это логическое значение
|
||||
|
||||
$foo = 10; // $foo — это целое число
|
||||
$bar = (bool) $foo; // $bar — это логическое значение
|
||||
?>
|
||||
]]>
|
||||
</programlisting>
|
||||
</informalexample>
|
||||
|
||||
<simpara>
|
||||
Допускаются следующие приведения типов:
|
||||
Разрешены следующие приведения типов:
|
||||
</simpara>
|
||||
|
||||
|
||||
<simplelist>
|
||||
<member><literal>(int)</literal> - приведение типа к целому числу (<type>int</type>)</member>
|
||||
<member><literal>(bool)</literal> - приведение типа к логическому значению (<type>bool</type>)</member>
|
||||
<member><literal>(float)</literal> - приведение типа к числу с плавающей точкой (<type>float</type>)</member>
|
||||
<member><literal>(string)</literal> - приведение типа к строке (<type>string</type>)</member>
|
||||
<member><literal>(array)</literal> - приведение типа к массиву (<type>array</type>)</member>
|
||||
<member><literal>(object)</literal> - приведение типа к объекту (<type>object</type>)</member>
|
||||
<member><literal>(unset)</literal> - приведение типа к <type>NULL</type></member>
|
||||
<member><literal>(int)</literal> — приведение типа к целому числу (<type>int</type>)</member>
|
||||
<member><literal>(bool)</literal> — приведение типа к логическому значению (<type>bool</type>)</member>
|
||||
<member><literal>(float)</literal> — приведение типа к числу с плавающей точкой (<type>float</type>)</member>
|
||||
<member><literal>(string)</literal> — приведение типа к строке (<type>string</type>)</member>
|
||||
<member><literal>(array)</literal> — приведение типа к массиву (<type>array</type>)</member>
|
||||
<member><literal>(object)</literal> — приведение типа к объекту (<type>object</type>)</member>
|
||||
<member><literal>(unset)</literal> — приведение типа к <type>NULL</type></member>
|
||||
</simplelist>
|
||||
|
||||
<note>
|
||||
<para>
|
||||
<literal>(integer)</literal> является псевдонимом приведения типа <literal>(int)</literal>.
|
||||
<literal>(boolean)</literal> является псевдонимом приведения типа <literal>(bool)</literal>.
|
||||
<literal>(binary)</literal> является псевдонимом приведения типа <literal>(string)</literal>.
|
||||
<literal>(double)</literal> и <literal>(real)</literal> являются псевдонимами приведения типа <literal>(float)</literal>.
|
||||
<literal>(integer)</literal> — псевдоним приведения типа <literal>(int)</literal>.
|
||||
<literal>(boolean)</literal> — псевдоним приведения типа <literal>(bool)</literal>.
|
||||
<literal>(binary)</literal> — псевдоним приведения типа <literal>(string)</literal>.
|
||||
<literal>(double)</literal> и <literal>(real)</literal> — псевдонимы приведения типа <literal>(float)</literal>.
|
||||
Эти приведения не используют каноническое имя типа и не рекомендуются.
|
||||
</para>
|
||||
</note>
|
||||
|
||||
<warning>
|
||||
<simpara>
|
||||
Псевдоним приведения типа <literal>(real)</literal> устарел, начиная с PHP 8.0.0.
|
||||
Псевдоним приведения типа <literal>(real)</literal> устарел с PHP 8.0.0.
|
||||
</simpara>
|
||||
</warning>
|
||||
|
||||
<warning>
|
||||
<simpara>
|
||||
Приведение типа <literal>(unset)</literal> устарело, начиная с версии PHP 7.2.0.
|
||||
Приведение типа <literal>(unset)</literal> устарело с версии PHP 7.2.0.
|
||||
Обратите внимание, что приведение <literal>(unset)</literal> равносильно присвоению переменной или вызову значения <type>NULL</type>.
|
||||
Приведение <literal>(unset)</literal> удалено в PHP 8.0.0.
|
||||
</simpara>
|
||||
@ -321,18 +338,19 @@ $bar = (bool) $foo; // $bar - это логическое значение
|
||||
<caution>
|
||||
<simpara>
|
||||
Приведение типа <literal>(binary)</literal> и префикс <literal>b</literal> существуют для прямой поддержки.
|
||||
В настоящее время <literal>(binary)</literal> и <literal>(string)</literal> идентичны, однако это может измениться и на это не следует полагаться.
|
||||
Типы <literal>(binary)</literal> и <literal>(string)</literal> идентичны, однако, это может измениться, не нужно на это полагаться.
|
||||
</simpara>
|
||||
</caution>
|
||||
|
||||
<note>
|
||||
<para>
|
||||
Пробелы игнорируются в круглых скобках при приведении типа.
|
||||
Таким образом, следующие два приведения типов эквивалентны:
|
||||
PHP игнорирует пробелы в круглых скобках при приведении типа.
|
||||
Поэтому следующие два приведения типов эквивалентны:
|
||||
<informalexample>
|
||||
<programlisting role="php">
|
||||
<![CDATA[
|
||||
<?php
|
||||
|
||||
$foo = (int) $bar;
|
||||
$foo = ( int ) $bar;
|
||||
?>
|
||||
@ -350,6 +368,7 @@ $foo = ( int ) $bar;
|
||||
<programlisting role="php">
|
||||
<![CDATA[
|
||||
<?php
|
||||
|
||||
$binary = (binary) $string;
|
||||
$binary = b"binary string";
|
||||
?>
|
||||
@ -366,11 +385,12 @@ $binary = b"binary string";
|
||||
<programlisting role="php">
|
||||
<![CDATA[
|
||||
<?php
|
||||
$foo = 10; // $foo является целым числом
|
||||
$str = "$foo"; // $str является строкой
|
||||
$fst = (string) $foo; // $fst также является строкой
|
||||
|
||||
// Выводит, что "они одинаковые"
|
||||
$foo = 10; // $foo — целое число
|
||||
$str = "$foo"; // $str — строка
|
||||
$fst = (string) $foo; // $fst тоже строка
|
||||
|
||||
// Выводит, что «они одинаковые»
|
||||
if ($fst === $str) {
|
||||
echo "они одинаковые";
|
||||
}
|
||||
@ -381,8 +401,8 @@ if ($fst === $str) {
|
||||
</note>
|
||||
|
||||
<para>
|
||||
Может быть неочевидно, что именно произойдёт при преобразовании между определёнными типами.
|
||||
Для получения дополнительной информации смотрите эти разделы:
|
||||
Может быть неочевидно, что произойдёт при преобразовании между разными типами.
|
||||
Получить дополнительную информацию можно в разделах:
|
||||
|
||||
<simplelist>
|
||||
<member><link linkend="language.types.boolean.casting">Преобразование типа к логическому значению (boolean)</link></member>
|
||||
@ -401,7 +421,7 @@ if ($fst === $str) {
|
||||
<simplesect>
|
||||
<note>
|
||||
<simpara>
|
||||
Поскольку PHP поддерживает индексацию в строках (<type>string</type>) с помощью смещения, используя тот же синтаксис,
|
||||
Поскольку PHP поддерживает индексацию в строках (<type>string</type>) через смещения, используя тот же синтаксис,
|
||||
что и индексация в массивах (<type>array</type>), следующий пример справедлив для всех версий PHP:
|
||||
</simpara>
|
||||
|
||||
@ -409,8 +429,9 @@ if ($fst === $str) {
|
||||
<programlisting role="php">
|
||||
<![CDATA[
|
||||
<?php
|
||||
$a = 'car'; // $a является строкой
|
||||
$a[0] = 'b'; // $a по-прежнему является строкой
|
||||
|
||||
$a = 'car'; // $a — строка
|
||||
$a[0] = 'b'; // $a по-прежнему строка
|
||||
echo $a; // bar
|
||||
?>
|
||||
]]>
|
||||
@ -418,7 +439,7 @@ echo $a; // bar
|
||||
</informalexample>
|
||||
|
||||
<simpara>
|
||||
Дополнительную информацию смотрите в разделе <link linkend="language.types.string.substr">Доступ к символу в строке и его изменение</link>.
|
||||
Дополнительную информацию можно найти разделе «<link linkend="language.types.string.substr">Доступ к символу в строке и его изменение</link>».
|
||||
</simpara>
|
||||
</note>
|
||||
</simplesect>
|
||||
|
Reference in New Issue
Block a user