Mudanças de compatibilidade com versões anteriores.
Embora muitos códigos existentes em PHP 5 funcionarem sem mudanças, você deve ter atenção nas seguintes mudanças de compatibilidade:
-
getrusage() retorna
NULLquando argumentos incompatíveis são passados, a partir do PHP 5.2.1. -
ZipArchive::setCommentName()
retorna
TRUEem caso de sucesso, a partir do PHP 5.2.1. -
ZipArchive::setCommentIndex()
retorna
TRUEem caso de sucesso, a partir do PHP 5.2.1. - SplFileObject::getFilename() retorna o nome do arquivo, com o caminho absoluto, a partir do PHP 5.2.1.
- Muda a prioridade da variável de ambiente PHPRC em Win32 A variável de ambiente PHPRC agora tem prioridade sob o caminho armazenado nos registros do Windows.
- CLI SAPI no longer checks cwd for php.ini or the php-cli.ini file No PHP 5.1.x uma funcionalidade não documentada foi adicionada fazendo com que o binário verificasse o diretório atual para carregar o arquivo de configuração do PHP, gerando comportamentos imprevisíveis se um arquivo de configuração não esperado for carregado. Esta funcionalidade foi removida na versão 5.2.0, então o PHP não verifica mais a presença dos arquivos php.ini ou php-cli.ini. Veja também a seção linha de comando no manual.
-
Adicionado um aviso quando forem executadas operações de módulo 0
Em versões anteriores do PHP, ao executar uma operação de módulo 0 (% 0) com um inteiro
não se emitia nenhuma mensagem de alerta, retornando um valor
FALSEinesperado. A partir do PHP 5.2.0, esta operação emitiráE_WARNING, como em todos os casos ao realizar divisões por zero.<?php
print 10 % 0;
/* Warning: Division by zero in filename on line n */
?> -
O __toString() foi alterado para que possa ser
chamado onde for aplicável.
O método mágico __toString() agora será chamado
em contexto de string, ou seja, em qualquer objeto que seja utilizado como string.
O fallback que retornava uma string contendo o identificador do objeto foi removido no
PHP 5.2.0. Isto começou a ser um problema por que o identificador do objeto não poderia
ser considerado único. Esta mudança significa que se sua aplicação está esperando
este comportamento, a mesma pode falhar. Na tentativa de utilizar o valor retornado
quando o método não for aplicável, agora resultará em um erro tratável.
Até com __toString(), objetos não podem ser utilizados como indices ou chaves de um array. Posteriormente nós devemos adicionar uma funcionalidade embutida que dé suporte a isto, mas na versão 5.2.x você terá que fornecer seu próprio hashing ou a nova função do SPL spl_object_hash(). Excessões não podem lançadas dentro do __toString().
<?php
class foo {}
$foo = new foo;
print $foo;
/* Catchable fatal error: Object of class foo could
not be converted to string in filename on line n */
?><?php
class foo {
public function __toString() {
throw new Exception;
}
}
try {
print new foo;
/* Fatal error: Method foo::__toString() must
not throw an exception in filename on line n */
} catch(Exception $e) {}
?> -
Funções de classes abstratas e estáticas foram removidas.
Devido a um descuido nas versões 5.0.x e 5.1.x do PHP, foi permitido funções estáticas
abstratas em classes. A partir do PHP 5.2.x, apenas as interfaces podem tê-las.
<?php
abstract class foo {
abstract static function bar();
/* Strict Standards: Static function foo::bar()
should not be abstract in filename on line n */
}
?> - A Extensão Oracle requer, pelo menos, o Oracle 10 no Windows.
-
Adicionado suporte RFC2397 (data: stream).
A introdução do esquema de URL de dados podem levar uma mudança de comportamento no Windows. Se você estiver usando o sistema de arquivos NTFS e usar meta streams em sua aplicação, e se ocorrer de você usar um arquivo com o nome 'data:' ele será acessado sem o seu caminho - e não funcionará mais. Para corrigir isso use o protocolo 'file:' quando for acessá-lo.
Veja também » RFC 2397
<?php
/* when allow_url_include is OFF (default) */
include "data:;base64,PD9waHAgcGhwaW5mbygpOz8+";
/* Warning: include(): URL file-access is disabled
in the server configuration in filename on line n */
?> -
Regresssão no padrão glob()
Na versão 5.2.4 uma correção de segurança causava uma regressão para os padrões do formulário "/foo/*/bar/*". Desde a versão 5.2.5 ao invés de exibir um warning a função glob() retornará
FALSEquando as restrições openbase_dir forem violadas.