Alterações imcompatíveis com versões anteriores

Embora a maior parte do código existente de PHP 5 funcione sem alterações, devem ser observadas algumas alteraçõs incompatíveis com versões anteriores:

Chaves de array não serão sobrescritas ao definir um array como uma propriedade de classe via array literal

Anteriormente, arrays declarados como propriedades de classe que misturavam chaves explícitas e implícitas poderiam ter elementos de array sileciosamente sobrescritos se um chave implícita fosse a mesma de uma implícita sequencial. Por exemplo:

<?php
class C {
    const ONE = 1;
    public $array = [
        self::ONE => 'foo',
        'bar',
        'quux',
    ];
}

var_dump((new C)->array);
?>

Saída do exemplo acima no PHP 5.5:

array(2) {
  [0]=>
  string(3) "bar"
  [1]=>
  string(4) "quux"
}

Saída do exemplo acima no PHP 5.6:

array(3) {
  [1]=>
  string(3) "foo"
  [2]=>
  string(3) "bar"
  [3]=>
  string(4) "quux"
}

Rigor de json_decode()

json_decode() agora rejeita variantes dos literais JSON true, false e null que não estejam em minúsculas, conforme especificação JSON, e define json_last_error() adequadamente. Anteriormente, entradas para json_decode() que consistiam somente de um desses valores em maiúsculas ou misturas de maiúsculas/minúsculas eram aceitas.

Esta alteração somente afetará casos onde um JSON inválido estiver sendo passado para json_decode(): entrada JSON válida não é afetada e continuará a ser avaliada normalmente.

Empacotadores de fluxo agora verificar certificados e nomes de servidor por padrão ao usar SSL/TLS

Todos os streams criptografados de cliente agora permitem a verificação de mesmo nível por padrão. Por padrão, será usada a coleção de CAs padrão do OpenSSL para verificar o certificado de mesmo nível. Na maioria dos casos, nenhuma alteração precisará ser feita para se comunicar com servidores com certificados SSL válidos, pois as distribuições geralmente configuram o OpenSSL com coleções de CAs bem conhecidos.

A coleção de CAs padrão pode ser substituída globalmente definindo a configuração openssl.cafile ou openssl.capath, ou por requisição usando as opções de contexto cafile ou capath .

Embora em geral não seja recomendado, é possível desabilitar a verificação de certificado de mesmo nível para uma requisição definindo a opção de contexto verify_peer para false e é possível desabilitar a verificação de nome de mesmo nível definindo a opção de contexto verify_peer_name para false.

Recursos GMP agora são objetos

Recursos GMP agora são objetos. A API funcional implementada na extensão GMP não foi alterada, e o código deve ser executado sem modificação a menos que ele verifique explicitamente por um recurso usando a função is_resource() ou outra similar.

Funções Mcrypt agora requerem chaves e IVs válidos

mcrypt_encrypt(), mcrypt_decrypt(), mcrypt_cbc(), mcrypt_cfb(), mcrypt_ecb(), mcrypt_generic() e mcrypt_ofb() não mais aceitarão chaves ou IVs com tamanhos incorretos, e modorincorrect sizes, e os modos de criptografia de bloco que exigem IVs agora falharão se um IV não for fornecido.

Envios de arquivo com cURL

Envios de arquivo usando a sintaxe @file agora requerem que CURLOPT_SAFE_UPLOAD seja definido para false. A classe CURLFile deve ser usada no lugar.