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 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.
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.
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;
}
}
?>
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';
}
?>