PHP Velho Oeste 2024

Mudanças incompatíveis com versões anteriores

Embora a moir parte do código PHP 5 existente deva funcionar sem nenhuma alteração, por favor esteja ciente de que existem algumas mudanças incompatíveis:

  • A nova API interna de compilação de parametro foi aplicada em todas as extensões embarcadas com o PHP 5.3.x. Esta API de compilação de parametro faz com que as funções retornem NULL quando parametros incompatíveis são enviados. Existem algumas exceções a esta regra, como a função get_class(), que continua retornando FALSE para errors.
  • clearstatcache() não limpa mais o cache do realpath por padão.
  • realpath() agora é totalmente indepentende da plataforma. A consequência disto é que caminhos relativos inválidos como __FILE__ . "/../x" não vão mais funcionar.
  • A família de funções do call_user_func() agora propagam $this mesmo que o invocador seja uma classe pai.
  • As funções para array natsort(), natcasesort(), usort(), uasort(), uksort(), array_flip(), e array_unique() não aceitam mais objetos enviados como argumentos. Para continuar enviando objetos, primeiro converta o objeto para um array.
  • O comportamento de funções com parametros por referência mas chamadas pelo valor mudou. Onde antes a função aceitaria um argumento pelo valor, um erro falta é emitido. Qualquer código anterior passando constantes ou literais para funções esperando referências, devem ser alterados para associar o valor a uma variável antes de chamar a função.
  • A nova biblioteca do mysqlnd precisa precisa do novo formato de senhas do MySQL 4.1 com 41 bytes. O uso do antigo formato de 16 bytes faz com que o mysql_connect() e funções similares emitam o erro: "mysqlnd cannot connect to MySQL 4.1+ using old authentication."
  • A nova biblioteca do mysqlnd não lê os arquivos de configurações do mysql (my.cnf/my.ini), como a antiga biblioteca faz. Se seu código confia nas configurações contidas no arquivo de configuração, você pode ler explicitamente com a função mysqli_options(). Perceba que isso significa que as constantes específicas do PDO PDO::MYSQL_ATTR_READ_DEFAULT_FILE e PDO::MYSQL_ATTR_READ_DEFAULT_GROUP não serão definidas se o suporte ao MySQL no PDO for compilado com o mysqlnd.
  • A / no final foi removida da classe SplFileInfo e outras classes de diretórios relacionados.
  • O método mágico __toString() não mais aceita argumentos.
  • Os métodos mágicos __get(), __set(), __isset(), __unset(), e __call() devem sempre ser declarados como public e não podem mais ser static. As assinaturas de método agora são obrigatórias.
  • O método mágico __call() agora é invocado no acesso de métodos private e protected.
  • func_get_arg(), func_get_args() e func_num_args() não podem mais ser chamadas do escopo mais alto de um arquivo que foi incluído pela função include ou require de dentro da função no arquivo que fez a chamada.
  • Uma camada de emulação para a extensão MHASH para encapsular a extensão Hash foi adicionada. Entretando nem todos os algorítimos foram cobertos, notavelmente o algorítimo de hash s2k. Isso significa que o s2k não está mais disponível no PHP 5.3.0.

As seguintes palavras chaves agora estão reservadas e não podem ser utilizadas em funções, classes, nomes e etc.

add a note add a note

User Contributed Notes 3 notes

up
0
chokolatrix
5 years ago
In PHP 5.3, when accessing a string as an array, if the key was a string (non-existing because, for strings, the keys are integers), first char was returned. Probably it converts the string to integer, therefore to 0.
PHP 5.4 throws a warning.

$article;       // this holds '98765' but you expect an array

// You try to read a value from your "array"
// PHP 5.3 : nothing
// PHP 5.4 : Warning: Illegal string offset at line ...
$value = $article['id_article'];

var_dump($value);              // returns:   string(1) "9"

.
up
0
peterix at gmail dot com
7 years ago
strlen changed in 5.3.0. It no longer returns 5 when called on Arrays.

If you abused this in your codebase, beware.
up
0
Chris Bolt
14 years ago
call_user_func_array() no longer accepts null as a second parameter and calls the function. It now emits a warning and does not call the function.
To Top