svn: /phpdoc/zh/trunk/language/ operators.xml
[email protected] (Dai Jie) Tue, 18 Feb 2020 19:48:49 +0000
| Newsgroups | php.doc.zh |
|---|---|
| Message-ID | <[email protected]> |
daijie Tue, 18 Feb 2020 19:48:49 +0000
Revision: http://svn.php.net/viewvc?view=revision&revision=349235
Log:
Sync with en
Changed paths:
U phpdoc/zh/trunk/language/operators.xml
svn-diffs-349235.txt
(text/x-diff, 13.8 KB)
Modified: phpdoc/zh/trunk/language/operators.xml
===================================================================
--- phpdoc/zh/trunk/language/operators.xml 2020-02-17 06:33:42 UTC (rev 349234)
+++ phpdoc/zh/trunk/language/operators.xml 2020-02-18 19:48:49 UTC (rev 349235)
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
-<!-- EN-Revision: 338860 Maintainer: jhdxr Status: ready -->
+<!-- EN-Revision: 348555 Maintainer: jhdxr Status: ready -->
<chapter xml:id="language.operators" xmlns="http://docbook.org/ns/docbook">
<title>运算符</title>
<simpara>
@@ -59,11 +59,6 @@
<entry><link linkend="language.oop5.cloning">clone</link> 和 <link linkend="language.oop5.basic.new">new</link></entry>
</row>
<row>
- <entry>左</entry>
- <entry><literal>[</literal></entry>
- <entry><function>array</function></entry>
- </row>
- <row>
<entry>右</entry>
<entry><literal>**</literal></entry>
<entry><link linkend="language.operators.arithmetic">算术运算符</link></entry>
@@ -83,7 +78,7 @@
<literal>@</literal>
</entry>
<entry>
- <link linkend="language.types">类型</link>和<link linkend="language.operators.increment">递增/递减</link>
+ <link linkend="language.types">类型</link>、<link linkend="language.operators.increment">递增/递减</link>、<link linkend="language.operators.errorcontrol">错误控制</link>
</entry>
</row>
<row>
@@ -119,7 +114,7 @@
<literal>.</literal>
</entry>
<entry>
- <link linkend="language.operators.arithmetic">算术运算符</link>和<link
+ <link linkend="language.operators.arithmetic">算术运算符</link>&listendand;<link
linkend="language.operators.string">字符串运算符</link></entry>
</row>
<row>
@@ -162,7 +157,7 @@
<entry>左</entry>
<entry><literal>&</literal></entry>
<entry>
- <link linkend="language.operators.bitwise">位运算符</link>和<link
+ <link linkend="language.operators.bitwise">位运算符</link>&listendand;<link
linkend="language.references">引用</link></entry>
</row>
<row>
@@ -194,10 +189,10 @@
</entry>
</row>
<row>
- <entry>左</entry>
+ <entry>右</entry>
<entry><literal>??</literal></entry>
<entry>
- <link linkend="language.operators.comparison">比较运算符</link>
+ <link linkend="language.operators.comparison.coalesce">null 合并运算符</link>
</entry>
</row>
<row>
@@ -204,11 +199,11 @@
<entry>左</entry>
<entry><literal>? :</literal></entry>
<entry>
- <link linkend="language.operators.comparison.ternary">ternary</link>
+ <link linkend="language.operators.comparison.ternary">三元运算符</link>
</entry>
</row>
<row>
- <entry>right</entry>
+ <entry>右</entry>
<entry>
<literal>=</literal>
<literal>+=</literal>
@@ -229,6 +224,20 @@
</entry>
</row>
<row>
+ <entry>右</entry>
+ <entry><literal>yield from</literal></entry>
+ <entry>
+ <link linkend="control-structures.yield.from">yield from</link>
+ </entry>
+ </row>
+ <row>
+ <entry>右</entry>
+ <entry><literal>yield</literal></entry>
+ <entry>
+ <link linkend="control-structures.yield">yield</link>
+ </entry>
+ </row>
+ <row>
<entry>左</entry>
<entry><literal>and</literal></entry>
<entry>
@@ -292,6 +301,30 @@
]]>
</programlisting>
</example>
+ <example>
+ <title><literal>+</literal>、<literal>-</literal> 、<literal>.</literal> 具有相同的优先级</title>
+ <programlisting role="php">
+<![CDATA[
+<?php
+$x = 4;
+// this line might result in unexpected output:
+echo "x minus one equals " . $x-1 . ", or so I hope\n";
+// because it is evaluated like this line:
+echo (("x minus one equals " . $x) - 1) . ", or so I hope\n";
+// the desired precedence can be enforced by using parentheses:
+echo "x minus one equals " . ($x-1) . ", or so I hope\n";
+?>
+]]>
+ </programlisting>
+ &example.outputs;
+ <screen>
+<![CDATA[
+-1, or so I hope
+-1, or so I hope
+x minus one equals 3, or so I hope
+]]>
+ </screen>
+ </example>
</para>
<note>
<para>
@@ -350,8 +383,8 @@
</row>
<row>
<entry>$a ** $b</entry>
- <entry>Exponentiation</entry>
- <entry>Result of raising <varname>$a</varname> to the <varname>$b</varname>'th power. Introduced in PHP 5.6.</entry>
+ <entry>求幂</entry>
+ <entry> <varname>$a</varname> 的 <varname>$b</varname>次方的值. PHP 5.6版本中引入.</entry>
</row>
</tbody>
</tgroup>
@@ -358,9 +391,11 @@
</table>
<simpara>
除法运算符总是返回浮点数。只有在下列情况例外:两个操作数都是整数(或字符串转换成的整数)并且正好能整除,这时它返回一个整数。
+ 整数除法可参考 <function>intdiv</function>。
</simpara>
<simpara>
- 取模运算符的操作数在运算之前都会转换成整数(除去小数部分)。
+ 取模运算符的操作数在运算之前都会转换成整数(除去小数部分)。 浮点数取模可参考
+ <function>fmod</function>。
</simpara>
<para>
取模运算符 <literal>%</literal> 的结果和被除数的符号(正负号)相同。即
@@ -461,28 +496,43 @@
</example>
</para>
<para>
- 自 PHP 5 起,<link linkend="language.oop5.basic.new">new</link>
- 运算符自动返回一个引用,因此再对
- <link linkend="language.oop5.basic.new">new</link>
- 的结果进行引用赋值在 PHP 5.3 以及以后版本中会发出一条
- <constant>E_DEPRECATED</constant> 错误信息,在之前版本会发出一条
- <constant>E_STRICT</constant> 错误信息。
+ The <link linkend="language.oop5.basic.new">new</link>
+ 运算符自动返回一个引用,因此在 PHP 7.0.0及之后的版本中禁止对
+ <link linkend="language.oop5.basic.new">new</link> 的结果进行引用赋值;
+ PHP 5.3.0 及之后的版本则发出一条
+ <constant>E_DEPRECATED</constant> 错误信息;在更早的版本中发出的是
+ <constant>E_STRICT</constant>。
</para>
<para>
- 例如以下代码将产生警告:
+ 例如以下代码将产生错误或警告:
<informalexample>
- <programlisting role="php">
+ <programlisting role="php">
<![CDATA[
<?php
class C {}
-/* The following line generates the following error message:
- * Deprecated: Assigning the return value of new by reference is deprecated in...
- */
$o = &new C;
?>
]]>
</programlisting>
+ &example.outputs.7;
+ <screen>
+<![CDATA[
+Parse error: syntax error, unexpected 'new' (T_NEW) in …
+]]>
+ </screen>
+ &example.outputs.53;
+ <screen>
+<![CDATA[
+Deprecated: Assigning the return value of new by reference is deprecated in …
+]]>
+ </screen>
+ &example.outputs.5;
+ <screen>
+<![CDATA[
+Strict Standards: Assigning the return value of new by reference is deprecated in …
+]]>
+ </screen>
</informalexample>
</para>
<para>
@@ -1116,11 +1166,12 @@
</para>
<warning>
<para>
- Shifting integers by values greater than or equal to the system long
- integer width results in undefined behavior. In other words, don't shift
- more than 31 bits on a 32-bit system, and don't shift more than 63 bits on
- a 64-bit system.
-</para>
+ Prior to PHP 7.0, shifting integers by values greater than or equal to the
+ system long integer width, or by negative numbers, results in undefined
+ behavior. In other words, if you're using PHP 5.x, don't shift more than 31
+ bits on a 32-bit system, and don't shift more than 63 bits on 64-bit
+ system.
+ </para>
<para>
使用 <link linkend="book.gmp">gmp</link> 扩展对超出 <literal>PHP_INT_MAX</literal> 的数值来进行位操作。
</para>
@@ -1201,20 +1252,13 @@
</row>
<row>
<entry>$a <=> $b</entry>
- <entry>太空船运算符(组合比较符)</entry>
+ <entry>结合比较运算符</entry>
<entry>
- 当<varname>$a</varname>小于、等于、大于<varname>$b</varname>时
+ 当<varname>$a</varname>小于、等于、大于than <varname>$b</varname>时
分别返回一个小于、等于、大于0的<type>integer</type> 值。
PHP7开始提供.
</entry>
</row>
- <row>
- <entry>$a ?? $b ?? $c</entry>
- <entry>NULL 合并操作符</entry>
- <entry>
- 从左往右第一个存在且不为 &null; 的操作数。如果都没有定义且不为 &null;,则返回 &null;。PHP7开始提供。
- </entry>
- </row>
</tbody>
</tgroup>
</table>
@@ -1355,45 +1399,32 @@
</tbody>
</tgroup>
</table>
+
<para>
<example>
- <title>标准数组比较代码</title>
+ <title>Boolean/null comparison</title>
<programlisting role="php">
<![CDATA[
<?php
-// 数组是用标准比较运算符这样比较的
-function standard_array_compare($op1, $op2)
-{
- if (count($op1) < count($op2)) {
- return -1; // $op1 < $op2
- } elseif (count($op1) > count($op2)) {
- return 1; // $op1 > $op2
- }
- foreach ($op1 as $key => $val) {
- if (!array_key_exists($key, $op2)) {
- return null; // uncomparable
- } elseif ($val < $op2[$key]) {
- return -1;
- } elseif ($val > $op2[$key]) {
- return 1;
- }
- }
- return 0; // $op1 == $op2
-}
+// Bool and null are compared as bool always
+var_dump(1 == TRUE); // TRUE - same as (bool)1 == TRUE
+var_dump(0 == FALSE); // TRUE - same as (bool)0 == FALSE
+var_dump(100 < TRUE); // FALSE - same as (bool)100 < TRUE
+var_dump(-10 < FALSE);// FALSE - same as (bool)-10 < FALSE
+var_dump(min(-100, -10, NULL, 10, 100)); // NULL - (bool)NULL < (bool)-100 is FALSE < TRUE
?>
]]>
</programlisting>
</example>
</para>
-
-
+
<para>
<example>
- <title>Transcription of standard array comparison</title>
+ <title>标准数组比较代码</title>
<programlisting role="php">
<![CDATA[
<?php
-// Arrays are compared like this with standard comparison operators
+// 数组是用标准比较运算符这样比较的
function standard_array_compare($op1, $op2)
{
if (count($op1) < count($op2)) {
@@ -1417,7 +1448,7 @@
</programlisting>
</example>
</para>
-
+
<para>
参见 <function>strcasecmp</function>,<function>strcmp</function>,<link
linkend="language.operators.array">数组运算符</link>和<link linkend="language.types">类型</link>章节。
@@ -1444,10 +1475,10 @@
<programlisting role="php">
<![CDATA[
<?php
-// Example usage for: Ternary Operator
+// 三元运算符的例子
$action = (empty($_POST['action'])) ? 'default' : $_POST['action'];
-// The above is identical to this if/else statement
+// 以上等同于以下的 if/else 语句
if (empty($_POST['action'])) {
$action = 'default';
} else {
@@ -1505,7 +1536,67 @@
</para>
</note>
</sect2>
+
+ <sect2 xml:id="language.operators.comparison.coalesce">
+ <title>NULL 合并运算符</title>
+ <para>
+ PHP 7 开始存在 "??" (NULL 合并)运算符。
+ <example>
+ <title>设置默认值</title>
+ <programlisting role="php">
+<![CDATA[
+<?php
+// NULL 合并运算符的例子
+$action = $_POST['action'] ?? 'default';
+// 以上例子等同于于以下 if/else 语句
+if (isset($_POST['action'])) {
+ $action = $_POST['action'];
+} else {
+ $action = 'default';
+}
+
+?>
+]]>
+ </programlisting>
+ </example>
+ 当 <replaceable>expr1</replaceable> 为 &null;,表达式 <literal>(expr1) ?? (expr2)</literal> 等同于
+ <replaceable>expr2</replaceable>,否则为 <replaceable>expr1</replaceable>。
+ </para>
+ <para>
+ 尤其要注意,当不存在左侧的值时,此运算符也和 <function>isset</function> 一样不会产生警告。
+ 对于 array 键尤其有用。
+ </para>
+ <note>
+ <simpara>
+ 请注意:NULL 合并运算符是一个表达式,产生的也是表达式结果,而不是变量。
+ 返回引用变量时需要强调这一点。
+ 因此,在返回引用的函数里就无法使用这样的语句:<literal>return $foo ?? $bar;</literal>,还会提示警告。
+ </simpara>
+ </note>
+ <note>
+ <para>
+ 请注意,NULL 合并运算符支持简单的嵌套:
+ <example>
+ <title>嵌套 NULL 合并运算符</title>
+ <programlisting role="php">
+<![CDATA[
+<?php
+
+$foo = null;
+$bar = null;
+$baz = 1;
+$qux = 2;
+
+echo $foo ?? $bar ?? $baz ?? $qux; // 输出 1
+
+?>
+]]>
+ </programlisting>
+ </example>
+ </para>
+ </note>
+ </sect2>
</sect1>
<sect1 xml:id="language.operators.errorcontrol">
@@ -1840,7 +1931,7 @@
<sect1 xml:id="language.operators.string">
<title>字符串运算符</title>
<simpara>
- 有两个字符串(<type>string</type>)运算符。第一个是连接运算符(“.”),它返回其左右参数连接后的字符串。第二个是连接赋值运算符(“.=”),它将右边参数附加到左边的参数之后。更多信息见<link
+ 有两个字符串(<type>string</type>)运算符。第一个是连接运算符(“.”),它返回其左右参数连接后的字符串。第二个是连接赋值运算符(“<literal>.=</literal>”),它将右边参数附加到左边的参数之后。更多信息见<link
linkend="language.operators.assignment">赋值运算符</link>。
</simpara>