Обновление до английской версии

This commit is contained in:
Sergey Panteleev
2022-04-08 11:36:27 +03:00
parent fcf25ec9d3
commit bfa19a5858

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 87b582706267d69006a8aaaed3b5eda2ccf99c92 Maintainer: shein Status: ready -->
<!-- EN-Revision: c653d5a2b9b3a2671ca017c9f7ab6976fa8d148d Maintainer: shein Status: ready -->
<!-- Reviewed: no -->
<chapter xml:id="language.operators" xmlns="http://docbook.org/ns/docbook">
<title>Операторы</title>
@ -1729,7 +1729,7 @@ var_dump(min(-100, -10, NULL, 10, 100)); // NULL - (bool)NULL < (bool)-100 эт
<programlisting role="php">
<![CDATA[
<?php
// Так сравниваются массивы при сравнении стандартными операторами
// Массивы сравниваются таким образом с помощью стандартных операторов сравнения, а также оператора spaceship.
function standard_array_compare($op1, $op2)
{
if (count($op1) < count($op2)) {
@ -1739,7 +1739,7 @@ function standard_array_compare($op1, $op2)
}
foreach ($op1 as $key => $val) {
if (!array_key_exists($key, $op2)) {
return null; // не могут быть сравнимы
return 1;
} elseif ($val < $op2[$key]) {
return -1;
} elseif ($val > $op2[$key]) {
@ -1767,6 +1767,16 @@ function standard_array_compare($op1, $op2)
</para>
</warning>
<note>
<simpara>
Помните, что жонглирование типами в PHP не всегда очевидно при сравнении значений разных типов,
особенно при сравнении целых чисел (&integer;) с логическими значениями (&boolean;)
или целых чисел (&integer;) со строками (&string;).
Поэтому в большинстве случаев рекомендуется использовать сравнения <literal>===</literal> и <literal>!==</literal>,
а не <literal>==</literal> и <literal>!=</literal>.
</simpara>
</note>
<sect2 role="seealso">
&reftitle.seealso;
<para>
@ -1797,7 +1807,6 @@ if (empty($_POST['action'])) {
} else {
$action = $_POST['action'];
}
?>
]]>
</programlisting>
@ -1810,9 +1819,10 @@ if (empty($_POST['action'])) {
</para>
<para>
Также стало возможным не писать среднюю часть
тернарного оператора. Выражение <literal>expr1 ?: expr3</literal>
возвращает <replaceable>expr1</replaceable> если <replaceable>expr1</replaceable>
имеет значение &true; и <replaceable>expr3</replaceable> в противном случае.
тернарного оператора. Выражение <literal>expr1 ?: expr3</literal> оценивается
как результат <replaceable>expr1</replaceable>, если результат выражения <replaceable>expr1</replaceable> оценивается как &true;
и <replaceable>expr3</replaceable> в противном случае.
Выражение <replaceable>expr1</replaceable> в этом случае оценивается только один раз.
</para>
<note>
<simpara>
@ -1850,6 +1860,25 @@ echo ((true ? 'true' : false) ? 't' : 'f');
// в свою очередь вычисляется в (bool)true, таким образом возвращая истинную ветвь
// второго тернарного выражения.
?>
]]>
</programlisting>
</example>
</para>
</note>
<note>
<para>
Цепочка коротких тернарных операторов (<literal>?:</literal>) стабильна и ведёт себя разумно.
Она будет оценивать первый аргумент, который оценивается как не ложное значение.
Обратите внимание, что неопределённые значения все равно вызовут предупреждение.
<example>
<title>Цепочка коротких тернарных операторов</title>
<programlisting role="php">
<![CDATA[
<?php
echo 0 ?: 1 ?: 2 ?: 3, PHP_EOL; //1
echo 0 ?: 0 ?: 2 ?: 3, PHP_EOL; //2
echo 0 ?: 0 ?: 0 ?: 3, PHP_EOL; //3
?>
]]>
</programlisting>
</example>
@ -1860,7 +1889,7 @@ echo ((true ? 'true' : false) ? 't' : 'f');
<sect2 xml:id="language.operators.comparison.coalesce">
<title>Оператор объединения с null</title>
<para>
Также добавился новый оператор "??" (null coalescing).
Другим полезным сокращённым оператором является оператор "??" (null coalescing).
<example>
<title>Присваивание значения по умолчанию</title>
<programlisting role="php">
@ -1875,7 +1904,6 @@ if (isset($_POST['action'])) {
} else {
$action = 'default';
}
?>
]]>
</programlisting>
@ -1896,6 +1924,22 @@ if (isset($_POST['action'])) {
функции возвращающей ссылку будет не работать, а выводить предупреждение.
</simpara>
</note>
<note>
<para>
У оператора null coalescing низкий приоритет. Это означает, что при смешивании его с другими операторами
(такими как конкатенация строк или арифметические операторы), скорее всего, потребуются круглые скобки.
</para>
<programlisting role="php">
<![CDATA[
<?php
// Вызывает предупреждение о том, что $name не определено.
print 'Mr. ' . $name ?? 'Anonymous';
// Выведет "Mr. Anonymous"
print 'Mr. ' . ($name ?? 'Anonymous');
?>
]]>
</programlisting>
</note>
<note>
<para>
Обратите внимание, что этот оператор позволяет использовать простую вложенность: