PHP Velho Oeste 2024

Mudanças em classes e objetos

instanceof, is_a(), is_subclass_of() and catch

No PHP 5.0, is_a() foi depreciada e substituída pelo operador instanceof. Existem alguns prolbemas com a implementação inicial do instanceof, que usou o __autoload() para buscar missing classes. Se a classe não estava presente, instanceof irá disparar um fatal E_ERROR devido a falha do __autoload() em encontrar a classe. O mesmo comportamento ocorrido no operador catch e na função is_subclass_of(), por essa mesma razão.

Nenhuma dessas funções ou chamadas de operadores __autoload() no PHP 5.1.x, e class_exists() foram soluções alternativas usadas no código escrito para PHP 5.0.x, enquanto não causava problemas dessa maneira, não são mais necessários.

Métodos privados abstratos

Métodos privados abstratos foram suportados entre o PHP 5.0.0 e PHP 5.0.4, mas eles foram desabilitados no escopo onde o comportamento private e abstract são mutualmente exclusivos.

Modificadores de acesso em interfaces

Versões abaixo do PHP 5.0, declaração de funções em interfaces eram tratadas exatamente da mesma maneira que declaração de funções em classes. Isto não era caso desde outubro de 2004, onde apontava apenas o modificador de acesso public era permitido nas declarações de funções de interface. Desde abril de 2005 - que antecede a versão do PHP 5.0b1 - o modificador static também foi permitido. Entretanto, os modificadores protected e private não irão disparar um E_ERROR, bem como abstract. Note que essa mudança não irá afetar o seu código existente, como nenhum desses modificadores fazem sentido num contexto de interface.

Mudanças nas regras de herança

Em versões anteriores ao PHP 5.0, era possível ter a declaração da função em uma classe derivada que não corresponde com a declaração da mesma função na classe base, ex.

Esse código irá causar um erro E_STRICT para ser emitido em versões anteriores ao PHP 5.1.x.

<?php
class Base {
    function &
return_by_ref() {
        
$r 1;
        return 
$r;
    }
}

class 
Derived extends Base {
    function 
return_by_ref() {
        return 
1;
    }
}
?>

Constantes de classe

Em versões abaixo do PHP 5.0.x, o código a seguir era válido:

Em versões abaixo do PHP 5.1.x, redefinir a constante de uma classe irá disparar um fatal E_ERROR.

<?php
class test {
    const 
foobar 'foo';
    const 
foobar 'bar';
}

?>
add a note add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top