-
-
Save flavioheleno/206f630c1a88881fb17fb225e9415c8f to your computer and use it in GitHub Desktop.
<?php | |
$_SERVER['BASE_PAGE'] = 'releases/8_0_x.php'; | |
include_once __DIR__ . '/../include/prepend.inc'; | |
if ($LANG !== 'en' && file_exists("8_0_x_$LANG.php")) { | |
mirror_redirect("/releases/8_0_x_$LANG.php?lang=$LANG"); | |
} | |
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, pulando 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 a sintaxe nativa do PHP.</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 boilerplate 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 inteligentes 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çam 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 motores 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 variável na captura de exceção <a href="https://wiki.php.net/rfc/non-capturing_catches">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> | |
Comparações mais inteligentes entre strings e números | |
<a href="https://wiki.php.net/rfc/string_to_number_comparison">RFC</a>. | |
</li> | |
<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 motor 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 do 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(); |
Linha 30:
Acredito que optimizações
é pt-pt e não pt-br.
Grafia no Brasil: otimização. Grafia em Portugal: optimização.
fonte
Linha 63:
Concordo!
Linha 90:
Eu prefiro não traduzir código, pra não perder a referência entre o original x tradução.
Linha 96:
Feito!
Linha 141:
Feito com uma pequena alteração na ordem das palavras :-D
Nota: Uma alternativa seria dizer que o código fica menos verboso, mas não sei se seria suficiente para substituir "boilerplate" nesse contexto.
Linha 184:
Olha essa definição:
Use "ao invés de" quando quiser o significado de "ao contrário de", "em oposição a", "avesso", "inverso". Use "em vez de" quando quiser um sentido de "no lugar de" ou "em lugar de".
fonte
Acho que "em vez de" faz mais sentido, não?
Linhas 189-221:
Mesmo caso da Linha 90, sem traduzir para não perder a referência entre o original x traducão.
Linha 274:
Meu herói! Não consegui encontrar uma tradução boa!
Linha 300:
Acho que ficou estranho, mas concordo que a tradução está longe do ideal.
Linha 323:
Feito!
Linhas 331-333:
Feito!
Linha 349:
Ótima sugestão!! Feito!
Linha 384:
Feito!
Linha 461
- Para downloads de código-fonte do PHP 8, visite a página de
+ Para downloads do código-fonte do PHP 8, visite a página de
Pode ser só eu, mas acho que o do
ficaria melhor que o de
..
Amazing work guys! 👍
Atualizado @chapeupreto! :-D
Linha 30:
Não sei se tem diferença, mas:
Linha 63:
Usaria
pular
ao invés deignorar
, só pelo peso da palavra mesmo, nada técnico ou traduçãoLinha 90:
Deveriamos traduzir?
Linha 96:
Só um 💅 em relação a ordenação
Linha 141:
Eu mencionaria o termo
boilerplate
, só para não perdemos o motivo original da RFCLinha 184:
Instead
eu vejo comoInvés
, mas pode ser só euEntre as linhas 189-221, deveríamos traduzir ou melhor deixar em inglês?
Linha 274:
Eu vejo
saner
como "mais inteligente", mas é um termo chatinho de traduzir mesmoLinha 300:
O que acha?
Linha 323:
Concordância:
Linhas 331-333:
Traduzir
engine
paramotor
?Linha 349:
Pode adicionar o link para a RFC, e eu mudaria a tradução, para conseguir explicar o título em inglês:
Linha 384:
Pode adicionar o link da RFC