Commit: 99eb7625278d4a88d449553b20ed282a401cd356 Author: daijie <dai...@php.net> Fri, 27 Nov 2020 17:58:08 +0800 Committer: George Peter Banyard <girg...@php.net> Fri, 27 Nov 2020 14:45:39 +0000 Parents: 93ef7c694c62afa6debe1145cbfdbbc5d0fd8d79 Branches: master
Link: http://git.php.net/?p=web/php.git;a=commitdiff;h=99eb7625278d4a88d449553b20ed282a401cd356 Log: Translate php 8.0 release page to Chinese Simplified Closes GH-363 Changed paths: M include/layout.inc A releases/8.0/zh.php
diff --git a/include/layout.inc b/include/layout.inc index e9cededab..2968e9b6d 100644 --- a/include/layout.inc +++ b/include/layout.inc @@ -714,6 +714,7 @@ function release_language_chooser($currentlang) { 'de' => 'German', 'fr' => 'French', 'ru' => 'Russian', + 'zh' => 'Chinese Simplified', ); // Print out the form with all the options diff --git a/releases/8.0/zh.php b/releases/8.0/zh.php new file mode 100644 index 000000000..8467201a7 --- /dev/null +++ b/releases/8.0/zh.php @@ -0,0 +1,509 @@ +<?php +$_SERVER['BASE_PAGE'] = 'releases/8.0/en.php'; +include_once __DIR__ . '/../../include/prepend.inc'; + +if (($LANG !== 'zh') && file_exists(__DIR__ . '/' . basename($LANG) . '.php')) { + mirror_redirect('/releases/8.0/' . urlencode($LANG) . '.php?lang=' . urlencode($LANG)); +} + +$meta_image_path = $MYSITE . 'images/php8/php_8_released.png'; +$meta_description = 'PHP 8.0 是 PHP 语言的一个主版本更新。它包含了很多新功能与优化项,包括命名参数、联合类型、注解、构造器属性提升、match 表达式、Nullsafe 运算符、JIT,并改进了类型系统、错误处理、语法一致性。'; +site_header("PHP 8.0.0 发布公告", array( + "current" => "php8", + 'css' => array('php8.css'), + 'meta_tags' => <<<META +<meta name="twitter:card" content="summary_large_image" /> +<meta name="twitter:site" content="@official_php" /> +<meta name="twitter:title" content="PHP 8.0 已发布" /> +<meta name="twitter:description" content="{$meta_description}" /> +<meta name="twitter:creator" content="@official_php" /> +<meta name="twitter:image:src" content="{$meta_image_path}" /> +<meta itemprop="name" content="PHP 8.0 Released" /> +<meta itemprop="description" content="{$meta_description}" /> +<meta itemprop="image" content="{$meta_image_path}" /> +<meta property="og:image" content="{$meta_image_path}" /> +<meta property="og:description" content="{$meta_description}" /> +META +)); +?> +<section class="php8-section php8-section_dark php8-section_header center"> + <div class="page-tools"> + <div class="change-language"> + <?php echo release_language_chooser($LANG); ?> + </div> + </div> + <div class="php8-section__content"> + <div class="php8-logo"> + <img src="/images/php8/logo_php8.svg" alt="php8" height="126" width="343"> + </div> + <div class="php8-title">已发布!</div> + <div class="php8-subtitle"> + PHP 8.0 是 PHP 语言的一个主版本更新。 + <br class="display-none-md"> 它包含了很多新功能与优化项, + 包括命名参数、联合类型、注解、构造器属性提升、match 表达式、nullsafe 运算符、JIT,并改进了类型系统、错误处理、语法一致性。 + </div> + <div class="php8-button-wrapper center"> + <a class="php8-button php8-button_light" href="/downloads">更新到 PHP 8!</a> + </div> + </div> +</section> + +<section class="php8-section center"> + <div class="php8-compare"> + <h2 class="php8-h2" id="named-arguments"> + 命名参数 + <a class="php8-rfc" href="https://wiki.php.net/rfc/named_params">RFC</a> + </h2> + <div class="php8-compare__main"> + <div class="php8-compare__block example-contents"> + <div class="php8-compare__label">PHP 7</div> + <div class="php8-code phpcode"> + <?php highlight_php_trimmed( + 'htmlspecialchars($string, ENT_COMPAT | ENT_HTML401, \'UTF-8\', false);' + );?> + </div> + + + </div> + <div class="php8-compare__arrow"></div> + <div class="php8-compare__block example-contents"> + <div class="php8-compare__label php8-compare__label_new">PHP 8</div> + <div class="php8-code phpcode"> + <?php highlight_php_trimmed( + 'htmlspecialchars($string, double_encode: false);' + );?> + </div> + </div> + </div> + <div class="php8-compare__content"> + <ul> + <li>仅仅指定必填参数,跳过可选参数。</li> + <li>参数的顺序无关、自己就是文档(self-documented)</li> + </ul> + </div> + </div> + + <div class="php8-compare"> + <h2 class="php8-h2" id="attributes"> + 注解 + <a class="php8-rfc" href="https://wiki.php.net/rfc/attributes_v2">RFC</a> + </h2> + <div class="php8-compare__main"> + <div class="php8-compare__block example-contents"> + <div class="php8-compare__label">PHP 7</div> + <div class="php8-code phpcode"> + <?php highlight_php_trimmed( + 'class PostsController +{ + /** + * @Route("/api/posts/{id}", methods={"GET"}) + */ + public function get($id) { /* ... */ } +}' + );?> + </div> + </div> + <div class="php8-compare__arrow"></div> + <div class="php8-compare__block example-contents"> + <div class="php8-compare__label php8-compare__label_new">PHP 8</div> + <div class="php8-code phpcode"> + <?php highlight_php_trimmed( + 'class PostsController +{ + #[Route("/api/posts/{id}", methods: ["GET"])] + public function get($id) { /* ... */ } +}' + );?> + </div> + </div> + </div> + <div class="php8-compare__content"> + <p>现在可以用 PHP 原生语法来使用结构化的元数据,而非 PHPDoc 声明。</p> + </div> + </div> + + <div class="php8-compare"> + <h2 class="php8-h2" id="constructor-property-promotion"> + 构造器属性提升 + <a class="php8-rfc" href="https://wiki.php.net/rfc/constructor_promotion">RFC</a> <a class="php8-rfc" href="/manual/zh/language.oop5.decon.php#language.oop5.decon.constructor.promotion">文档</a> + </h2> + <div class="php8-compare__main"> + <div class="php8-compare__block example-contents"> + <div class="php8-compare__label">PHP 7</div> + <div class="php8-code phpcode"> + <?php highlight_php_trimmed( + 'class Point { + public float $x; + public float $y; + public float $z; + public function __construct( + float $x = 0.0, + float $y = 0.0, + float $z = 0.0, + ) { + $this->x = $x; + $this->y = $y; + $this->z = $z; + } +}' + );?> + </div> + </div> + <div class="php8-compare__arrow"></div> + <div class="php8-compare__block example-contents"> + <div class="php8-compare__label php8-compare__label_new">PHP 8</div> + <div class="php8-code phpcode"> + <?php highlight_php_trimmed( + 'class Point { + public function __construct( + public float $x = 0.0, + public float $y = 0.0, + public float $z = 0.0, + ) {} +}' + );?> + </div> + </div> + </div> + <div class="php8-compare__content"> + <p>更少的样板代码来定义并初始化属性。</p> + </div> + </div> + + <div class="php8-compare"> + <h2 class="php8-h2" id="union-types"> + 联合类型 + <a class="php8-rfc" href="https://wiki.php.net/rfc/union_types_v2">RFC</a> <a class="php8-rfc" href="/manual/zh/language.types.declarations.php#language.types.declarations.union">文档</a> + </h2> + <div class="php8-compare__main"> + <div class="php8-compare__block example-contents"> + <div class="php8-compare__label">PHP 7</div> + <div class="php8-code phpcode"> + <?php highlight_php_trimmed( + 'class Number { + /** @var int|float */ + private $number; + /** + * @param float|int $number + */ + public function __construct($number) { + $this->number = $number; + } +} +new Number(\'NaN\'); // Ok' + );?> + </div> + </div> + <div class="php8-compare__arrow"></div> + <div class="php8-compare__block example-contents"> + <div class="php8-compare__label php8-compare__label_new">PHP 8</div> + <div class="php8-code phpcode"> + <?php highlight_php_trimmed( + 'class Number { + public function __construct( + private int|float $number + ) {} +} +new Number(\'NaN\'); // TypeError' + );?> + </div> + </div> + </div> + <div class="php8-compare__content"> + <p>相对于以前的 PHPDoc 声明类型的组合, + 现在可以用原生支持的联合类型声明取而代之,可在实际运行中验证。</p> + </div> + </div> + + <div class="php8-compare"> + <h2 class="php8-h2" id="match-expression"> + Match 表达式 + <a class="php8-rfc" href="https://wiki.php.net/rfc/match_expression_v2">RFC</a> <a class="php8-rfc" href="/manual/zh/control-structures.match.php">文档</a> + </h2> + <div class="php8-compare__main"> + <div class="php8-compare__block example-contents"> + <div class="php8-compare__label">PHP 7</div> + <div class="php8-code phpcode"> + <?php highlight_php_trimmed( + 'switch (8.0) { + case \'8.0\': + $result = "Oh no!"; + break; + case 8.0: + $result = "This is what I expected"; + break; +} +echo $result; +//> Oh no!' + );?> + </div> + </div> + <div class="php8-compare__arrow"></div> + <div class="php8-compare__block example-contents"> + <div class="php8-compare__label php8-compare__label_new">PHP 8</div> + <div class="php8-code phpcode"> + <?php highlight_php_trimmed( + 'echo match (8.0) { + \'8.0\' => "Oh no!", + 8.0 => "This is what I expected", +}; +//> This is what I expected' + );?> + </div> + </div> + </div> + <div class="php8-compare__content"> + <p>新的 match 类似于 switch,并具有以下功能:</p> + <ul> + <li>Match 是一个表达式,它可以储存到变量中亦可以直接返回。</li> + <li>Match 分支仅支持单行,它不需要一个 break; 语句。</li> + <li>Match 使用严格比较。</li> + </ul> + </div> + </div> + + <div class="php8-compare"> + <h2 class="php8-h2" id="nullsafe-operator"> + Nullsafe 运算符 + <a class="php8-rfc" href="https://wiki.php.net/rfc/nullsafe_operator">RFC</a> + </h2> + <div class="php8-compare__main"> + <div class="php8-compare__block example-contents"> + <div class="php8-compare__label">PHP 7</div> + <div class="php8-code phpcode"> + <?php highlight_php_trimmed( + '$country = null; +if ($session !== null) { + $user = $session->user; + if ($user !== null) { + $address = $user->getAddress(); + + if ($address !== null) { + $country = $address->country; + } + } +}' + );?> + </div> + </div> + <div class="php8-compare__arrow"></div> + <div class="php8-compare__block example-contents"> + <div class="php8-compare__label php8-compare__label_new">PHP 8</div> + <div class="php8-code phpcode"> + <?php highlight_php_trimmed( + '$country = $session?->user?->getAddress()?->country;' + );?> + </div> + </div> + </div> + <div class="php8-compare__content"> + <p>现在可以用新的 nullsafe 运算符链式调用,而不需要条件检查 null。 + 如果链条中的一个元素失败了,整个链条会中止并认定为 Null。</p> + </div> + </div> + + <div class="php8-compare"> + <h2 class="php8-h2" id="saner-string-to-number-comparisons"> + 字符串与数字的比较更符合逻辑 + <a class="php8-rfc" href="https://wiki.php.net/rfc/string_to_number_comparison">RFC</a> + </h2> + <div class="php8-compare__main"> + <div class="php8-compare__block example-contents"> + <div class="php8-compare__label">PHP 7</div> + <div class="php8-code phpcode"> + <?php highlight_php_trimmed( + '0 == \'foobar\' // true' + );?> + </div> + </div> + <div class="php8-compare__arrow"></div> + <div class="php8-compare__block example-contents"> + <div class="php8-compare__label php8-compare__label_new">PHP 8</div> + <div class="php8-code phpcode"> + <?php highlight_php_trimmed( + '0 == \'foobar\' // false' + );?> + </div> + </div> + </div> + <div class="php8-compare__content"> + <p>PHP 8 比较数字字符串(numeric string)时,会按数字进行比较。 + 不是数字字符串时,将数字转化为字符串,按字符串比较。</p> + </div> + </div> + + <div class="php8-compare"> + <h2 class="php8-h2" id="consistent-type-errors-for-internal-functions"> + 内部函数类型错误的一致性。 + <a class="php8-rfc" href="https://wiki.php.net/rfc/consistent_type_errors">RFC</a> + </h2> + <div class="php8-compare__main"> + <div class="php8-compare__block example-contents"> + <div class="php8-compare__label">PHP 7</div> + <div class="php8-code phpcode"> + <?php highlight_php_trimmed( + 'strlen([]); // Warning: strlen() expects parameter 1 to be string, array given +array_chunk([], -1); // Warning: array_chunk(): Size parameter expected to be greater than 0' + );?> + </div> + </div> + <div class="php8-compare__arrow"></div> + <div class="php8-compare__block example-contents"> + <div class="php8-compare__label php8-compare__label_new">PHP 8</div> + <div class="php8-code phpcode"> + <?php highlight_php_trimmed( + 'strlen([]); // TypeError: strlen(): Argument #1 ($str) must be of type string, array given +array_chunk([], -1); // ValueError: array_chunk(): Argument #2 ($length) must be greater than 0' + );?> + </div> + </div> + </div> + <div class="php8-compare__content"> + <p>现在大多数内部函数在参数验证失败时抛出 Error 级异常。</p> + </div> + </div> +</section> + +<section class="php8-section php8-section_light"> + <h2 class="php8-h2">即时编译</h2> + <p> + PHP 8 引入了两个即时编译引擎。 + Tracing JIT 在两个中更有潜力,它在综合基准测试中显示了三倍的性能, + 并在某些长时间运行的程序中显示了 1.5-2 倍的性能改进。 + 典型的应用性能则和 PHP 7.4 不相上下。 + </p> + <h3 class="php8-h3"> + 关于 JIT 对 PHP 8 性能的贡献 + </h3> + <p> + <img src="/images/php8/scheme.svg" width="900" alt="Just-In-Time compilation"> + </p> + + <div class="php8-columns"> + <div class="php8-column"> + <h2 class="php8-h2 php8-h2_margin-top">类型系统与错误处理的改进</h2> + <ul> + <li> + 算术/位运算符更严格的类型检测 + <a href="https://wiki.php.net/rfc/arithmetic_operator_type_checks">RFC</a> + </li> + <li> + Abstract trait 方法的验证 <a href="https://wiki.php.net/rfc/abstract_trait_method_validation">RFC</a> + </li> + <li> + 确保魔术方法签名正确 <a href="https://wiki.php.net/rfc/magic-methods-signature">RFC</a> + </li> + <li> + PHP 引擎 warning 警告的重新分类 <a href="https://wiki.php.net/rfc/engine_warnings">RFC</a> + </li> + <li> + 不兼容的方法签名导致 Fatal 错误 <a href="https://wiki.php.net/rfc/lsp_errors">RFC</a> + </li> + <li> + 操作符 @ 不再抑制 fatal 错误。 + </li> + <li> + 私有方法继承 <a href="https://wiki.php.net/rfc/inheritance_private_methods">RFC</a> + </li> + <li> + Mixed 类型 <a href="https://wiki.php.net/rfc/mixed_type_v2">RFC</a> + </li> + <li> + Static 返回类型 <a href="https://wiki.php.net/rfc/static_return_type">RFC</a> + </li> + <li> + 内部函数的类型 + <a href="https://externals.io/message/106522">Email thread</a> + </li> + <li> + 扩展 + <a href="https://php.watch/versions/8.0/resource-CurlHandle">Curl</a>、 + <a href="https://php.watch/versions/8.0/gdimage">Gd</a>、 + <a href="https://php.watch/versions/8.0/sockets-sockets-addressinfo">Sockets</a>、 + <a href="https://php.watch/versions/8.0/OpenSSL-resource">OpenSSL</a>、 + <a href="https://php.watch/versions/8.0/xmlwriter-resource">XMLWriter</a>、 + <a href="https://php.watch/versions/8.0/xmlwriter-resource">XML</a> + 以 Opaque 对象替换 resource。 + </li> + </ul> + </div> + <div class="php8-column"> + <h2 class="php8-h2 php8-h2_margin-top">其他语法调整和改进</h2> + <ul> + <li> + 允许参数列表中的末尾逗号 <a href="https://wiki.php.net/rfc/trailing_comma_in_parameter_list">RFC</a>、 + 闭包 use 列表中的末尾逗号 <a href="https://wiki.php.net/rfc/trailing_comma_in_closure_use_list">RFC</a> + </li> + <li> + 无捕获的 catche <a href="https://wiki.php.net/rfc/non-capturing_catches">RFC</a> + </li> + <li> + 变量语法的调整 <a href="https://wiki.php.net/rfc/variable_syntax_tweaks">RFC</a> + </li> + <li> + Namespace 名称作为单个 token <a href="https://wiki.php.net/rfc/namespaced_names_as_token">RFC</a> + </li> + <li> + 现在 throw 是一个表达式 <a href="https://wiki.php.net/rfc/throw_expression">RFC</a> + </li> + <li> + 允许对象的 ::class <a href="https://wiki.php.net/rfc/class_name_literal_on_object">RFC</a> + </li> + </ul> + + <h2 class="php8-h2 php8-h2_margin-top">新的类、接口、函数</h2> + <ul> + <li> + <a href="https://wiki.php.net/rfc/weak_maps">Weak Map</a> 类 + </li> + <li> + <a href="https://wiki.php.net/rfc/stringable">Stringable</a> 接口 + </li> + <li> + <a href="https://wiki.php.net/rfc/str_contains">str_contains()</a>、 + <a href="https://wiki.php.net/rfc/add_str_starts_with_and_ends_with_functions">str_starts_with()</a>、 + <a href="https://wiki.php.net/rfc/add_str_starts_with_and_ends_with_functions">str_ends_with()</a> + </li> + <li> + <a href="https://github.com/php/php-src/pull/4769">fdiv()</a> + </li> + <li> + <a href="https://wiki.php.net/rfc/get_debug_type">get_debug_type()</a> + </li> + <li> + <a href="https://github.com/php/php-src/pull/5427">get_resource_id()</a> + </li> + <li> + <a href="https://wiki.php.net/rfc/token_as_object">token_get_all()</a> 对象实现 + </li> + </ul> + </div> + </div> +</section> + +<section class="php8-section php8-section_dark php8-section_footer php8-footer"> + <div class="php8-section__content"> + <h2 class="php8-h2 center"> + 性能更好,语法更好,类型安全更完善 + </h2> + <div class="php8-button-wrapper center"> + <a class="php8-button php8-button_light" href="/downloads">更新到 PHP 8!</a> + </div> + <div class="php8-footer__content"> + <p> + 请访问 <a href="http://www.php.net/downloads">下载</a> 页面下载 PHP 8 源代码。 + 在 <a href="http://windows.php.net/download">PHP for Windows</a> 站点中可找到 Windows 二进制文件。 + <a href="http://www.php.net/ChangeLog-8.php">ChangeLog</a> 中有变更历史记录清单。 + </p> + <p> + PHP 手册中有 <a href="/manual/zh/migration80.php">迁移指南</a>。 + 请参考它描述的新功能详细清单、向后不兼容的变化。 + </p> + </div> + </div> +</section> + + + + +<?php site_footer(); \ No newline at end of file
-- PHP Webmaster List Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php