En PHP 5.0, is_a() quedó obsoleto en favor del operador
instanceof. Había algunos problemas con la implementación
inicial de instanceof, que dependía de
__autoload() para localizar las clases no encontradas.
Si no se localizara la clase, instanceof emitiría un error
fatal E_ERROR
ya que
__autoload() fallaría al ubicar la clase. Este mismo comportamiento
tenía lugar con el operador catch y con la función
is_subclass_of(), por la misma razón.
En PHP 5.1.x ninguna de estas funciones y operadores llama a __autoload(), y los trucos tipo class_exists() que se usaban con PHP 5.0.x, pese a que no provocan problemas, ya no serán necesarios.
Los métodos privados abstractos estaban permitidos entre PHP 5.0.0 y PHP 5.0.4, pero se prohibió su uso ya que los comportamientos de private y abstract son mutuamente excluyentes.
En PHP 5.0, las declaraciones de funciones en interfaces se trataban de la misma
manera que las declaraciones de funciones en clases. Desde octubre de 2004 esto
no es así, fecha a partir de la cual se permite el modificador de acceso public
en la declaración de funciones en interfaces. Desde abril de 2005
- fecha de la edición de PHP 5.0b1 - se permitió usar también el modificador
static. Pero los modificadores
protected y private ahora emiten
un error E_ERROR
, tal y como pasa con
abstract. Debe tenerse en cuenta que este cambio no afectará al código
ya existente, ya que ninguno de estos modificadores tiene, en ningún caso, sentido
en un contexto de interfaces.
En PHP 5.0 era posible redeclarar una función, en una clase derivada, que no coincidera con la declaración de esa misma función de la clase base, por ejemplo:
Este código provocará un error E_STRICT
en 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;
}
}
?>
En PHP 5.0.x, el siguiente código era inválido:
En PHP 5.1.x, si se redefine una constante de clase se lanzará un error fatal
E_ERROR
.
<?php
class test {
const foobar = 'foo';
const foobar = 'bar';
}
?>