Skip to content

Commit

Permalink
Update appendices
Browse files Browse the repository at this point in the history
  • Loading branch information
mowangjuanzi committed Nov 8, 2023
1 parent dfb9d27 commit d8c795e
Show file tree
Hide file tree
Showing 10 changed files with 165 additions and 259 deletions.
120 changes: 46 additions & 74 deletions appendices/migration70/new-features.xml
Original file line number Diff line number Diff line change
Expand Up @@ -9,18 +9,16 @@
<title>标量类型声明</title>

<para>
标量<link linkend="language.types.declarations">类型声明</link>
有两种模式: 强制 (默认) 和 严格模式。 现在可以使用下列类型参数(无论用强制模式还是严格模式):
字符串(<type>string</type>), 整数 (<literal>int</literal>), 浮点数 (<type>float</type>),
以及布尔值 (<literal>bool</literal>)。它们扩充了PHP5中引入的其他类型:类名,接口,<type>数组</type>和
<type>回调类型</type>。
标量<link linkend="language.types.declarations">类型声明</link>有两种模式: 强制(默认)和严格模式。现在可以使用下列类型参数(无论用强制模式还是严格模式)
字符串(<type>string</type>)、整数(<literal>int</literal>)、浮点数(<type>float</type>)以及布尔值(<literal>bool</literal>)。它们扩充了 PHP 5
中引入的其他类型:类名、接口、<type>array</type> 和 <type>callable</type>。
</para>

<informalexample>
<programlisting role="php">
<![CDATA[
<?php
// Coercive mode
// 强制模式
function sumOfInts(int ...$ints)
{
return array_sum($ints);
Expand All @@ -38,24 +36,21 @@ int(9)
</informalexample>

<para>
要使用严格模式,一个 &declare; 声明指令必须放在文件的顶部。这意味着严格声明标量是基于文件可配的。
这个指令不仅影响参数的类型声明,也影响到函数的返回值声明(参见
<link linkend="language.types.declarations">返回值类型声明</link>,
内置的PHP函数以及扩展中加载的PHP函数)
要使用严格模式,&declare; 声明指令必须放在文件的顶部。这意味着严格声明标量是基于文件可配的。这个指令不仅影响参数的类型声明,也影响到函数的返回值声明(参见<link
linkend="language.types.declarations">返回值类型声明</link>,内置的 PHP 函数以及扩展中加载的 PHP 函数)。
</para>

<para>
完整的标量类型声明文档和示例参见<link linkend="language.types.declarations">类型声明</link>章节。

</para>
</sect2>

<sect2 xml:id="migration70.new-features.return-type-declarations">
<title>返回值类型声明</title>

<para>
PHP 7 增加了对<link linkend="language.types.declarations">返回类型声明</link>的支持。
类似于<link linkend="language.types.declarations">参数类型声明</link>,返回类型声明指明了函数返回值的类型。可用的<link linkend="language.types.declarations">类型</link>与参数声明中可用的类型相同。
PHP 7 增加了对<link linkend="language.types.declarations">返回类型声明</link>的支持。类似于<link
linkend="language.types.declarations">参数类型声明</link>,返回类型声明指明了函数返回值的类型。可用的<link linkend="language.types.declarations">类型</link>与参数声明中可用的类型相同。
</para>

<informalexample>
Expand Down Expand Up @@ -87,33 +82,28 @@ Array
</informalexample>

<para>
完整的标量类型声明文档和示例可参见
<link linkend="language.types.declarations">返回值类型声明</link>.
完整的标量类型声明文档和示例可参见<link linkend="language.types.declarations">返回值类型声明</link>。
</para>
</sect2>

<sect2 xml:id="migration70.new-features.null-coalesce-op">
<title>null合并运算符</title>
<title>null 合并运算符</title>

<para>
由于日常使用中存在大量同时使用三元表达式和 <function>isset</function>的情况,
我们添加了null合并运算符 (<literal>??</literal>) 这个语法糖。如果变量存在且值不为&null;
它就会返回自身的值,否则返回它的第二个操作数。
由于日常使用中存在大量同时使用三元表达式和 <function>isset</function> 的情况,我们添加了 null
合并运算符(<literal>??</literal>)这个语法糖。如果变量存在且值不为 &null;,就会返回自身的值,否则返回第二个操作数。
</para>

<informalexample>
<programlisting role="php">
<![CDATA[
<?php
// Fetches the value of $_GET['user'] and returns 'nobody'
// if it does not exist.
// 获取 $_GET['user'] 的值,如果不存在,返回“nobody”
$username = $_GET['user'] ?? 'nobody';
// This is equivalent to:
// 等同于
$username = isset($_GET['user']) ? $_GET['user'] : 'nobody';
// Coalesces can be chained: this will return the first
// defined value out of $_GET['user'], $_POST['user'], and
// 'nobody'.
// 合并可以链式使用:这将会返回 $_GET['user']、$_POST['user'] 和“nobody”的第一个值
$username = $_GET['user'] ?? $_POST['user'] ?? 'nobody';
?>
]]>
Expand All @@ -127,8 +117,8 @@ $username = $_GET['user'] ?? $_POST['user'] ?? 'nobody';
<sect2 xml:id="migration70.new-features.spaceship-op">
<title>太空船操作符(组合比较符)</title>
<para>
太空船操作符用于比较两个表达式。当<varname>$a</varname>小于、等于或大于<varname>$b</varname>时它分别返回-1、0或1。
比较的原则是沿用 PHP 的<link linkend="types.comparisons">常规比较规则</link>进行的。
太空船操作符用于比较两个表达式。当 <varname>$a</varname> 小于、等于或大于 <varname>$b</varname> 时它分别返回 -1、0 或
1。比较的原则是沿用 PHP 的<link linkend="types.comparisons">常规比较规则</link>进行的。
</para>
<informalexample>
<programlisting role="php">
Expand Down Expand Up @@ -162,7 +152,7 @@ echo "b" <=> "a"; // 1

<para>
<type>Array</type> 类型的常量现在可以通过
<function>define</function> 来定义。在 PHP5.6 中仅能通过 &const; 定义。
<function>define</function> 来定义。在 PHP 5.6 中仅能通过 &const; 定义。
</para>

<informalexample>
Expand All @@ -186,7 +176,7 @@ echo ANIMALS[1]; // 输出 "cat"
<title>匿名类</title>

<para>
现在支持通过<literal>new class</literal> 来实例化一个匿名类,这可以用来替代一些“用后即焚”的完整类定义。
现在支持通过 <literal>new class</literal> 来实例化匿名类,这可以用来替代一些“用后即焚”的完整类定义。
</para>

<informalexample>
Expand Down Expand Up @@ -230,17 +220,16 @@ object(class@anonymous)#2 (0) {
</informalexample>

<para>
详细文档可以参考
<link linkend="language.oop5.anonymous">匿名类</link>.
详细文档可以参考<link linkend="language.oop5.anonymous">匿名类</link>。
</para>
</sect2>

<sect2 xml:id="migration70.new-features.unicode-codepoint-escape-syntax">
<title>Unicode codepoint 转译语法</title>

<para>
这接受一个以16进制形式的 Unicode codepoint,并打印出一个双引号或heredoc包围的 UTF-8 编码格式的字符串。
可以接受任何有效的 codepoint,并且开头的 0 是可以省略的。
这接受一个以 16 进制形式的 Unicode codepoint,并打印出一个双引号或 heredoc 包围的 UTF-8
编码格式的字符串。可以接受任何有效的 codepoint,并且开头的 0 是可以省略的。
</para>

<informalexample>
Expand Down Expand Up @@ -347,20 +336,20 @@ bool(true)
</informalexample>

<para>
若要使用此类,请先安装<link linkend="book.intl">Intl</link>扩展
若要使用此类,请先安装 <link linkend="book.intl">Intl</link> 扩展。
</para>
</sect2>

<sect2 xml:id="migration70.new-features.expectations">
<title>预期</title>

<para>
预期是向后兼用并增强之前的 <function>assert</function> 的方法。
它使得在生产环境中启用断言为零成本,并且提供当断言失败时抛出特定异常的能力。
预期是向后兼用并增强之前的 <function>assert</function> 的方法。它使得在生产环境中启用断言为零成本,并且提供当断言失败时抛出特定异常的能力。
</para>

<para>
老版本的API出于兼容目的将继续被维护,<function>assert</function>现在是一个语言结构,它允许第一个参数是一个表达式,而不仅仅是一个待计算的 <type>string</type>或一个待测试的<type>boolean</type>。
老版本的 API 出于兼容目的将继续被维护,<function>assert</function> 现在是语言结构,它允许第一个参数是表达式,而不仅仅是待计算的
<type>string</type> 或待测试的 <type>boolean</type>。
</para>

<informalexample>
Expand Down Expand Up @@ -391,8 +380,7 @@ Fatal error: Uncaught CustomError: Some error message
<title><literal>use</literal> 组声明</title>

<para>
从同一 &namespace; 导入的类、函数和常量现在可以通过单个 &use.namespace; 语句
一次性导入了。
从同一 &namespace; 导入的类、函数和常量现在可以通过单个 &use.namespace; 语句一次性导入了。
</para>

<informalexample>
Expand Down Expand Up @@ -426,11 +414,9 @@ use const some\namespace\{ConstA, ConstB, ConstC};
<title>生成器可以返回表达式</title>

<para>
此特性基于 PHP 5.5 版本中引入的生成器特性构建的。
它允许在生成器函数中通过使用 <literal>return</literal> 语法来返回一个表达式
(但是不允许返回引用值),
可以通过调用 <literal>Generator::getReturn()</literal> 方法来获取生成器的返回值,
但是这个方法只能在生成器完成产生工作以后调用一次。
此特性基于 PHP 5.5 版本中引入的生成器特性构建的。它允许在生成器函数中通过使用 <literal>return</literal>
语法来返回一个表达式(但是不允许返回引用值),可以通过调用 <literal>Generator::getReturn()</literal>
方法来获取生成器的返回值,但是这个方法只能在生成器完成产生工作以后调用一次。
</para>

<informalexample>
Expand Down Expand Up @@ -463,10 +449,7 @@ echo $gen->getReturn(), PHP_EOL;
</informalexample>

<para>
在生成器中能够返回最终的值是一个非常便利的特性,
因为它使得调用生成器的客户端代码可以直接得到生成器(或者其他协同计算)的返回值,
相对于之前版本中客户端代码必须先检查生成器是否产生了最终的值然后再进行响应处理
来得方便多了。
在生成器中能够返回最终的值是一个非常便利的特性,因为它使得调用生成器的客户端代码可以直接得到生成器(或者其他协同计算)的返回值,相对于之前版本中客户端代码必须先检查生成器是否产生了最终的值然后再进行响应处理来得方便多了。
</para>
</sect2>
<sect2 xml:id="migration70.new-features.generator-delegation">
Expand Down Expand Up @@ -519,8 +502,7 @@ foreach (gen() as $val)
<title>整数除法函数 <function>intdiv</function></title>

<para>
新加的函数 <function>intdiv</function> 用来进行
整数的除法运算。
新加的函数 <function>intdiv</function> 用来进行整数的除法运算。
</para>

<informalexample>
Expand All @@ -544,24 +526,19 @@ int(3)
<title>会话选项</title>

<para>
<function>session_start</function> 可以接受一个 <type>array</type> 作为参数,
用来覆盖 php.ini 文件中设置的
<link linkend="session.configuration">会话配置选项</link>。
<function>session_start</function> 可以接受 <type>array</type> 作为参数,用来覆盖
php.ini 文件中设置的<link linkend="session.configuration">会话配置选项</link>。
</para>

<para>
在调用 <function>session_start</function> 的时候,
传入的选项参数中也支持
<link linkend="ini.session.lazy-write">session.lazy_write</link> 行为,
默认情况下这个配置项是打开的。它的作用是控制 PHP 只有在会话中的数据发生变化的时候才
写入会话存储文件,如果会话中的数据没有发生改变,那么 PHP 会在读取完会话数据之后,
立即关闭会话存储文件,不做任何修改,可以通过设置
<literal>read_and_close</literal> 来实现。
在调用 <function>session_start</function> 的时候,传入的选项参数中也支持 <link
linkend="ini.session.lazy-write">session.lazy_write</link>
行为,默认情况下这个配置项是打开的。它的作用是控制 PHP 只有在会话中的数据发生变化的时候才写入会话存储文件,如果会话中的数据没有发生改变,那么
PHP 会在读取完会话数据之后,立即关闭会话存储文件,不做任何修改,可以通过设置 <literal>read_and_close</literal> 来实现。
</para>

<para>
例如,下列代码设置
<link linkend="ini.session.cache-limiter">session.cache_limiter</link> 为
例如,下列代码设置 <link linkend="ini.session.cache-limiter">session.cache_limiter</link> 为
<literal>private</literal>,并且在读取完毕会话数据之后马上关闭会话存储文件。
</para>

Expand All @@ -583,16 +560,13 @@ session_start([
<title><function>preg_replace_callback_array</function></title>

<para>
在 PHP 7 之前,当使用 <function>preg_replace_callback</function> 函数的时候,
由于针对每个正则表达式都要执行回调函数,可能导致过多的分支代码。
而使用新加的 <function>preg_replace_callback_array</function> 函数,
可以使得代码更加简洁。
在 PHP 7 之前,当使用 <function>preg_replace_callback</function>
函数的时候,由于针对每个正则表达式都要执行回调函数,可能导致过多的分支代码。而使用新加的
<function>preg_replace_callback_array</function> 函数,可以使得代码更加简洁。
</para>

<para>
现在,可以使用一个关联数组来对每个正则表达式注册回调函数,
正则表达式本身作为关联数组的键,
而对应的回调函数就是关联数组的值。
现在,可以使用一个关联数组来对每个正则表达式注册回调函数,正则表达式本身作为关联数组的键,而对应的回调函数就是关联数组的值。
</para>
</sect2>

Expand All @@ -612,9 +586,8 @@ session_start([
</title>

<para>
在之前版本中,<function>list</function> 函数不能保证
正确的展开实现了 <classname>ArrayAccess</classname> 接口的对象,
现在这个问题已经被修复。
在之前版本中,<function>list</function> 函数不能保证正确的展开实现了 <classname>ArrayAccess</classname>
接口的对象,现在这个问题已经被修复。
</para>
</sect2>

Expand All @@ -623,8 +596,7 @@ session_start([
<itemizedlist>
<listitem>
<simpara>
允许在克隆表达式上访问对象成员,例如:
<literal>(clone $foo)-&gt;bar()</literal>。
允许在克隆表达式上访问对象成员,例如:<literal>(clone $foo)-&gt;bar()</literal>。
</simpara>
</listitem>
</itemizedlist>
Expand Down
2 changes: 1 addition & 1 deletion appendices/migration70/new-functions.xml
Original file line number Diff line number Diff line change
Expand Up @@ -168,7 +168,7 @@
</sect2>

<sect2 xml:id="migration70.new-functions.zlib">
<title><link linkend="book.zlib">Zlib Compression</link></title>
<title><link linkend="book.zlib">Zlib 压缩</link></title>

<itemizedlist>
<listitem>
Expand Down
15 changes: 5 additions & 10 deletions appendices/migration70/other-changes.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,14 @@
<!-- $Revision$ -->
<!-- EN-Revision: fe70c2fc5f183b694b4ae1861153f3ed14114652 Maintainer: daijie Status: ready -->
<!-- Reviewed: no -->

<sect1 xml:id="migration70.other-changes" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>Other Changes</title>
<title>其它变更</title>

<sect2 xml:id="migration70.other-changes.loosening-reserved-words">
<title>放宽了保留词限制</title>

<para>
现在允许全局保留词用于类/接口/Trait 中的属性、常量和方法名。
在引入新关键词时,此变更减少了对向后兼容的破坏,避免了 API 命名的限制。
现在允许全局保留词用于 class、interface、Trait 中的属性、常量和方法名。在引入新关键词时,此变更减少了对向后兼容的破坏,避免了 API 命名的限制。
</para>

<para>
Expand All @@ -29,19 +27,16 @@ Project::new('Project Name')->private()->for('purpose here')->with('username her
</informalexample>

<para>
唯一的限制是: <literal>class</literal>关键词不能用于常量名,否则会和
类名解析语法冲突 (<literal>ClassName::class</literal>)。
唯一的限制是 <literal>class</literal> 关键词不能用于常量名,否则会和类名解析语法冲突(<literal>ClassName::class</literal>)。
</para>
</sect2>

<sect2 xml:id="migration70.other-changes.remove-date-timezone-warning">
<title>移除 date.timezone 警告</title>

<para>
调用任意 date- 开头或者其他基于时间的函数时,
未设置 <systemitem role="directive">date.timezone</systemitem> INI 设置的情况下,
之前会产生警告。
现在移除了警告(<systemitem role="directive">date.timezone</systemitem> 默认仍然是 UTC)
调用任意 date- 开头或者其他基于时间的函数时,未设置 <systemitem role="directive">date.timezone</systemitem> INI
设置的情况下,之前会产生警告。现在移除了警告(<systemitem role="directive">date.timezone</systemitem> 默认仍然是 UTC)。
</para>
</sect2>
</sect1>
Expand Down
2 changes: 0 additions & 2 deletions appendices/migration70/removed-exts-sapis.xml
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 3906d95218c8b4b1ce3fb57f81d0e7b3786794f6 Maintainer: daijie Status: ready -->
<!-- Reviewed: no -->

<sect1 xml:id="migration70.removed-exts-sapis" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>移除的扩展和 SAPI</title>

Expand Down
7 changes: 2 additions & 5 deletions appendices/migration70/sapi-changes.xml
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 310b9d4922fe5f83f7222b81ea25dce607ee645b Maintainer: daijie Status: ready -->
<!-- Reviewed: no -->

<sect1 xml:id="migration70.sapi-changes" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>SAPI 模块的变化</title>

Expand All @@ -16,9 +14,8 @@
</title>

<para>
在 PHP 5 中,<link linkend="listen">listen</link> 指令如果仅带一个端口数字,
则会监听所有网络接口,但只是 IPv4。
现在 PHP 7 会同时接受来自 IPv4 和 IPv6 上的请求。
在 PHP 5 中,<link linkend="listen">listen</link> 指令如果仅带一个端口数字,则会监听所有网络接口,但只是
IPv4。现在 PHP 7 会同时接受来自 IPv4 和 IPv6 上的请求。
</para>

<para>
Expand Down
Loading

0 comments on commit d8c795e

Please sign in to comment.