Commit: 580ebcc46597c48307ce3d592b26f6ff8bfdc3a5 Author: Roman Pronskiy <ro...@pronskiy.com> Fri, 20 Nov 2020 12:16:46 +0200 Committer: Sara Golemon <poll...@php.net> Wed, 25 Nov 2020 20:28:13 +0000 Parents: d491372994d2bc4bdb93f20b94b9a5a78b006882 Branches: master
Link: http://git.php.net/?p=web/php.git;a=commitdiff;h=580ebcc46597c48307ce3d592b26f6ff8bfdc3a5 Log: Add pt_BR page fro PHP 8 release Changed paths: M include/layout.inc A releases/8_0_x_pt_BR.php
diff --git a/include/layout.inc b/include/layout.inc index 57c8d766a..e994ebe91 100644 --- a/include/layout.inc +++ b/include/layout.inc @@ -698,7 +698,7 @@ function doc_toc_title($lang, $index, $file, $elm = "dt") { function release_language_chooser($currentlang) { $LANGUAGES = array( 'en' => 'English', -// 'pt_BR' => 'Brazilian Portuguese', + 'pt_BR' => 'Brazilian Portuguese', // 'zh' => 'Chinese (Simplified)', // 'nl' => 'Dutch', // 'fr' => 'French', diff --git a/releases/8_0_x_pt_BR.php b/releases/8_0_x_pt_BR.php new file mode 100644 index 000000000..e98e8f3e6 --- /dev/null +++ b/releases/8_0_x_pt_BR.php @@ -0,0 +1,479 @@ +<?php +$_SERVER['BASE_PAGE'] = 'releases/8_0_x.php'; +include_once __DIR__ . '/../include/prepend.inc'; + +if ($LANG === 'en') { + mirror_redirect("/releases/8_0_x.php?lang=$LANG"); + exit(); +} + +if ($LANG !== 'pt_BR' && file_exists("8_0_x_$LANG.php")) { + mirror_redirect("/releases/8_0_x_$LANG.php?lang=$LANG"); + exit(); +} + +site_header("PHP 8.0.0 Release Announcement", array( + "current" => "php_8_0_x", + 'css' => array('php8.css'), + 'meta_tags' => array( + 'og:image' => $MYSITE . 'images/php8/php_8_released.png' + ) +)); +?> + <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">released!</div> + <div class="php8-subtitle"> + PHP 8.0 é uma atualização importante da linguagem PHP. <br class="display-none-md"> Ela contém muitos novos + recursos e otimizações, incluindo argumentos nomeados, união de tipos, atributos, promoção de propriedade do + construtor, expressão match, operador nullsafe, JIT e melhorias no sistema de tipos, tratamento de + erros e consistência. + </div> + <div class="php8-button-wrapper center"> + <a class="php8-button php8-button_light" href="#">Atualize para o PHP 8!</a> + </div> + </div> + </section> + + <section class="php8-section center"> + <div class="php8-compare"> + <h2 class="php8-h2" id="named-arguments"> + Argumentos nomeados + <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"> + <pre>htmlspecialchars($string, ENT_COMPAT | ENT_HTML401, 'UTF-8', false);</pre> + </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"> + <pre>htmlspecialchars($string, double_encode: false);</pre> + </div> + </div> + </div> + <div class="php8-compare__content"> + <ul> + <li>Especifique apenas os parâmetros obrigatórios, ignorando os opcionais.</li> + <li>Os argumentos são independentes da ordem e autodocumentados.</li> + </ul> + </div> + </div> + + <div class="php8-compare"> + <h2 class="php8-h2" id="attributes"> + Atributos + <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"> +<pre>/** +* @Route("/api/posts/{id}", methods={"GET", "HEAD"}) +*/ +classUser +{</pre> + </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"> +<pre>#[Route("/api/posts/{id}", methods: ["GET", "HEAD"])] +class User +{</pre> + </div> + </div> + </div> + <div class="php8-compare__content"> + <p>Em vez de anotações PHPDoc, agora você pode usar metadados estruturados com sintaxe PHP nativa.</p> + </div> + </div> + + <div class="php8-compare"> + <h2 class="php8-h2" id="constructor-property-promotion"> + Promoção de propriedade de construtor + <a class="php8-rfc" href="https://wiki.php.net/rfc/constructor_promotion">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"> +<pre>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; + } +}</pre> + </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"> +<pre>class Point { + public function __construct( + public float $x = 0.0, + public float $y = 0.0, + public float $z = 0.0, + ) {} +}</pre> + </div> + </div> + </div> + <div class="php8-compare__content"> + <p>Menos código para definir e inicializar propriedades.</p> + </div> + </div> + + <div class="php8-compare"> + <h2 class="php8-h2" id="union-types"> + União de tipos + <a class="php8-rfc" href="https://wiki.php.net/rfc/union_types_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"> +<pre>class Number { + /** @var int|float */ + private $number; + + /** + * @param float|int $number + */ + public function __construct($number) { + $this->number = $number; + } +} + +new Number('NaN'); // Ok</pre> + </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"> +<pre>class Number { + public function __construct( + private int|float $number + ) {} +} + +new Number('NaN'); // TypeError</pre> + </div> + </div> + </div> + <div class="php8-compare__content"> + <p>Em vez de anotações PHPDoc para uma combinação de tipos, você pode usar declarações de união de tipos nativa + que são validados em tempo de execução.</p> + </div> + </div> + + <div class="php8-compare"> + <h2 class="php8-h2" id="match-expression"> + Expressão match + <a class="php8-rfc" href="https://wiki.php.net/rfc/match_expression_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"> +<pre>switch (8.0) { + case '8.0': + $result = "Oh no!"; + break; + case 8.0: + $result = "This is what I expected"; + break; +} +echo $result; +//> Oh no!</pre> + </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"> +<pre>echo match (8.0) { + '8.0' => "Oh no!", + 8.0 => "This is what I expected", +}; +//> This is what I expected</pre> + </div> + </div> + </div> + <div class="php8-compare__content"> + <p>A nova expressão match é semelhante ao switch e tem os seguintes recursos:</p> + <ul> + <li>Match é uma expressão, o que significa que seu resultado pode ser armazenado em uma variável ou + retornado.</li> + <li>Match suporta apenas expressões de uma linha e não precisa de uma declaração break;.</li> + <li>Match faz comparações estritas.</li> + </ul> + </div> + </div> + + <div class="php8-compare"> + <h2 class="php8-h2" id="nullsafe-operator"> + Operador 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"> +<pre>$country = null; + +if ($session !== null) { + $user = $session->user; + + if ($user !== null) { + $address = $user->getAddress(); + + if ($address !== null) { + $country = $address->country; + } + } +}</pre> + </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"> + <pre>$country = $session?->user?->getAddress()?->country;</pre> + </div> + </div> + </div> + <div class="php8-compare__content"> + <p>Em vez de verificar condições nulas, agora você pode usar uma cadeia de chamadas com o novo operador nullsafe. + Quando a avaliação de um elemento da cadeia falha, a execução de toda a cadeia é abortada e toda a cadeia é + avaliada como nula.</p> + </div> + </div> + + <div class="php8-compare"> + <h2 class="php8-h2" id="saner-string-to-number-comparisons"> + Comparações mais claras entre strings e números + <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"> + <pre>0 == 'foobar' // true</pre> + </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"> + <pre>0 == 'foobar' // false</pre> + </div> + </div> + </div> + <div class="php8-compare__content"> + <p>Ao comparar com uma string numérica, o PHP 8 usa uma comparação numérica. Caso contrário, ele converte o + número em uma string e usa uma comparação de string.</p> + </div> + </div> + + <div class="php8-compare"> + <h2 class="php8-h2" id="consistent-type-errors-for-internal-functions"> + Erros consistentes para tipos de dados em funções internas + <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"> +<pre>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</pre> + </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"> +<pre>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</pre> + </div> + </div> + </div> + <div class="php8-compare__content"> + <p>A maioria das funções internas agora lança uma exceção Fatal Error se a validação do parâmetro falhar.</p> + </div> + </div> + </section> + + <section class="php8-section php8-section_light"> + <h2 class="php8-h2">Compilação Just-In-Time</h2> + <p> + PHP 8 apresenta dois engines de compilação JIT. Tracing JIT, o mais promissor dos dois, mostra desempenho cerca de + 3 vezes melhor em benchmarks sintéticos e melhoria de 1,5 a 2 vezes em alguns aplicativos específicos de longa + execução. O desempenho típico das aplicações está no mesmo nível do PHP 7.4. + </p> + <p> + <img src="/images/php8/jit.png" alt="Just-In-Time compilation"> + </p> + + <h2 class="php8-h2 php8-h2_margin-top">Outros ajustes e melhorias de sintaxe</h2> + <div class="php8-columns"> + <div class="php8-column"> + <ul> + <li> + Permitir vírgula no final da lista de parâmetros + <a href="https://wiki.php.net/rfc/trailing_comma_in_parameter_list">RFC</a> e listas de uso em closures + <a href="https://wiki.php.net/rfc/trailing_comma_in_closure_use_list">RFC</a>. + </li> + <li> + Catches sem captura de exceção <a href="http://TODO">RFC</a>. + </li> + <li> + Ajustes de sintaxe para variáveis <a href="https://wiki.php.net/rfc/variable_syntax_tweaks">RFC</a>. + </li> + </ul> + </div> + <div class="php8-column"> + <ul> + <li> + Tratamento de nomes de namespace como token único + <a href="https://wiki.php.net/rfc/namespaced_names_as_token">RFC</a>. + </li> + <li> + Throw como expressão <a href="https://wiki.php.net/rfc/throw_expression">RFC</a>. + </li> + <li> + Permitir ::class em objetos <a href="https://wiki.php.net/rfc/class_name_literal_on_object">RFC</a>. + </li> + </ul> + </div> + </div> + <div class="php8-columns"> + <div class="php8-column"> + <h2 class="php8-h2 php8-h2_margin-top">Melhorias no sistema de tipo e tratamento de erros</h2> + <ul> + <li> + Verificações de tipo mais rígidas para operadores aritméticos / bit a bit + <a href="https://wiki.php.net/rfc/arithmetic_operator_type_checks">RFC</a>. + </li> + <li> + Validação de método abstrato em traits <a href="https://wiki.php.net/rfc/abstract_trait_method_validation">RFC</a>. + </li> + <li> + Assinaturas corretas de métodos mágicos <a href="https://wiki.php.net/rfc/magic-methods-signature">RFC</a> + </li> + <li> + Avisos de engine reclassificados <a href="https://wiki.php.net/rfc/engine_warnings">RFC</a>. + </li> + <li> + Erro fatal para assinaturas de método incompatíveis <a href="https://wiki.php.net/rfc/lsp_errors">RFC</a>. + </li> + <li> + O operador @ não silencia mais os erros fatais. + </li> + <li> + Herança com métodos privados <a href="https://wiki.php.net/rfc/inheritance_private_methods">RFC</a>. + </li> + <li> + Tipo mixed <a href="https://wiki.php.net/rfc/mixed_type_v2">RFC</a>. + </li> + <li> + Tipo de retorno static <a href="">RFC</a>. + </li> + <li> + Tipagem de funções internas + <a href="https://externals.io/message/106522">RFC</a>. + </li> + <li> + Objetos curl em vez de recursos + <a href="https://php.watch/versions/8.0/resource-CurlHandle">RFC</a>. + </li> + </ul> + </div> + <div class="php8-column"> + <h2 class="php8-h2 php8-h2_margin-top">Novas classes, interfaces e funções</h2> + <ul> + <li> + Classe <a href="https://wiki.php.net/rfc/weak_maps">Weak Map</a> + </li> + <li> + Interface <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> implementado com objetos + </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"> + Obtenha melhoria de desempenho gratuita.<br class="display-none-lg display-block-md"> + Obtenha melhor sintaxe.<br class="display-block-lg display-none-md display-block-sm"> + Obtenha mais segurança de tipos. + </h2> + <div class="php8-button-wrapper center"> + <a class="php8-button php8-button_light" href="#">Atualize para o PHP 8!</a> + </div> + <div class="php8-footer__content"> + <p> + Para downloads de código-fonte do PHP 8, visite a página de + <a href="http://www.php.net/downloads">downloads</a>. + Os binários do Windows podem ser encontrados na página <a href="http://windows.php.net/download">PHP para + Windows</a>. + A lista de mudanças é registrada no <a href="http://www.php.net/ChangeLog-8.php">ChangeLog</a>. + </p> + <p> + O <a href="http://php.net/manual/en/migration8.php">guia de migração</a> está disponível no Manual do PHP. + Consulte-o para obter uma lista detalhada de novos recursos e alterações incompatíveis com versões anteriores. + </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