E acaba de sair o PHP 5.6.0 cheio de novidades, como não sou do tipo que fica pra traz já dei uma estudada e gostei muito do que ví, vou dar uma passada com alguns exemplos e também deixar o anuncio oficial traduzido aqui pra vocês.
Antes de continuar vou também avisar que a alguns dias está disponível o PHP 5.5.16 e o 5.4.32, se você usa as versões 5.5.x ou 5.4.x atualize-se.
Expressões escaláveis em constantes
Isso é muito legal, anteriormente só podíamos declarar um valor fixo em constantes, agora podemos usar expressões envolvendo strings e literais numéricos aonde o resultado deve ser um valor estático, o exemplo dado na documentação e traduzido por mim é:
Gostou deste artigo?
Receba atualizações semanais com novos artigos do WebDevBr e outras dicas!
<?php
const UM = 1;
const DOIS = UM * 2;
class C {
const TRES = DOIS + 1;
const UM_TERCO = UM / self::TRES;
const SENTENCA = 'O valor de TRES é'.self::TRES;
public function f($a = UM + self::TRES) {
return $a;
}
}
echo (new C)->f()."n";
echo C::SENTENCA;
O resultado aqui seria 4 na primeira linha e "O valor de TRES é 3" na segunda, mas você pode copiar e rodar localmente no seu servidor devidamente atualizado para a nova versão.
Funções variádicas
Funções variádicas são aquelas aonde podemos passar uma quantidade não definida de parâmetros usando o operador "..." (três pontos), o exemplo original:
<?php
function f($req, $opt = null, ...$params) {
// $params é um array contendo os parametros restantes.
printf('$req: %d; $opt: %d; quantidade de parâmetros: %d'."n",
$req, $opt, count($params));
}
f(1);
f(1, 2);
f(1, 2, 3);
f(1, 2, 3, 4);
f(1, 2, 3, 4, 5);
</code></pre>
E isso retorna:
$req: 1; $opt: 0; quantidade de parâmetros: 0
$req: 1; $opt: 2; quantidade de parâmetros: 0
$req: 1; $opt: 2; quantidade de parâmetros: 1
$req: 1; $opt: 2; quantidade de parâmetros: 2
$req: 1; $opt: 2; quantidade de parâmetros: 3
Logo de cara já imaginei uma função pra me ajudar a gerar HTML, aonde eu indico uma tag no primeiro parâmetro e as demais vão construindo os atributos da tag, mas claro, ainda me vem muita coisa na cabeça, só deixei um exemplo pra vocês.
Argumentos descompactáveis
Ainda seguindo a ideia do splat (operador "...", o nome vem do Ruby) temos o processo inverso, aonde você pode passar um array para uma função variádica ou não e ela vai definir cada valor do array em um parâmetro, assim:
<?php
function add($a, $b, $c) {
return $a + $b + $c;
}
$operators = [2, 3];
echo add(1, ...$operators);
O resultado será 6 na tela.
Exponenciação com **
Se você não sabe o que é exponenciação também não vai entender este novo operador ("é um baratinho de matemática", kkk)
Assim como você faz com $a + $b ou $a - $b para usar exponenciação faça $a**$b ou seja $a elevado a $b.
Importar funções e constantes com use
Até então podíamos importar classes com o use, agora o mesmo pode ser feito com funções e constantes, super simples:
<?php
namespace Name\Space {
const FOO = 42;
function f() { echo __FUNCTION__."\n"; }
}
namespace {
use const Name\Space\FOO;
use function Name\Space\f;
echo FOO."\n";
f();
}
O resultado seria:
42
Name\Space\f
phpdg
Agora os debugs da linguagem ficaram muito mais fáceis e interativos com a biblioteca phpdb. Aqui para saber mais (em inglês)
Codificação de caracter padrão
Agora o valor padrão do default_charset foi alterado de vazio para UTF-8, meio óbvio até, não sei porque demorou tanto.
php://input reutilizável
Tradução direta:
php://input agora pode ser reaberto e lido quantas vezes forem necessárias. Este processo também resultou em uma redução significativa de memória necessária para lidar com dados POST.
Aqui um pouco sobre o php://input que já está disponível a um tempo, caso você não saiba.
Upload de arquivos muito grandes
Não é pra todo mundo o benefício, mas muita gente vai curtir. Agora é possível fazer uploads maiores que 2GB.
Objetos GMP agora suportam sobrecarga de operador.
Em outras palavras você vai ter um código mais elegante.
<?php
$a = gmp_init(42);
$b = gmp_init(17);
// antes do php 5.6:
var_dump(gmp_add($a, $b));
var_dump(gmp_add($a, 17));
var_dump(gmp_add(42, $b));
// Agora:
var_dump($a + $b);
var_dump($a + 17);
var_dump(42 + $b);
Algoritmo de hash gost-crypto
Tradução direta:
Foi adicionado o algoritmo de hash gost-crypto. Este implementa a função de hash GOST utilizando as tabelas CryptoPro S-box conforme especificado por » RFC 4357, seção 11.2
Melhorias em SSL/TLS
Entre outras palavras: impressões digitais
Tradução direta (via Google Translator):
A extensão OpenSSL foi estendido para incluir suporte para extrair e verificar as impressões digitais de certificados. opensslx509fingerprint () foi adicionada para extrair uma impressão digital de um certificado X.509, e foram adicionadas duas opções SSL contexto stream: capturepeercert para capturar o certificado X.509 do par, e peer_fingerprint afirmar que o certificado do cliente deve corresponder a impressão digital dada .
Além disso, um método de criptografia específica, como SSLv3 ou TLS podem agora ser selecionados, definindo a opção crypto_method contexto fluxo SSL. As opções possíveis incluem STREAM_CRYPTO_METHOD_SSLv2_CLIENT, STREAM_CRYPTO_METHOD_SSLv3_CLIENT, STREAM_CRYPTO_METHOD_SSLv23_CLIENT (o padrão), ou STREAM_CRYPTO_METHOD_TLS_CLIENT.
Compatibilidade
Algumas alterações também vão afetar a compatibilidade com:
- Os índices das matrizes não serão substituídos ao definir uma matriz como uma propriedade de uma classe através de uma matriz literal.
- json_decode agora é mais rigoroso quanto a sintaxe Json
- Stream wrappers agora verificam certificados de mesmo nível e nomes de host por padrão quando usados
- Os recursos do GMP agora são objetos
- Funções Mcrypt agora exigem chaves válidas e IVs.
Conclusão
É isso, tem muita coisa nova e bacana na nova versão do PHP, se atualizem e acessem a página abaixo para saber como migrar do PHP 5.5.x para o 5.6.x:
Migrando do PHP 5.5.x para o PHP 5.6.x
É isso ai, bons estudos.