В PHP 5.0 is_a() была объявлена устаревшей и заменена
оператором instanceof. Были некоторые проблемы с
первоначальной реализацией instanceof, которая полагалась
на __autoload() для поиска отсутствующих классов.
Если класс отсутствует, instanceof будет вызывать
фатальную ошибку уровня E_ERROR
из-за неудачного выполнения
__autoload() для поиска класса. Такое же поведение
было в операторе catch и в функции
is_subclass_of() по этой же причине.
Ни одна из этих функций или операторов не вызывает __autoload() в PHP 5.1.x, а временное решение с помощью class_exists() в коде, написанном для PHP 5.0.x, хотя никоим образом не вызывает проблем, но теперь больше не нужно.
Абстрактные закрытые методы поддерживались между PHP 5.0.0 и PHP 5.0.4, но затем были запрещены на том основании, что поведение закрытых и абстрактных методов являются взаимоисключающими.
В PHP 5.0 объявления функций в интерфейсах обрабатывались точно так же,
как объявления функций в классах. Это уже не так с октября 2004 года,
когда модификатор доступа public
был разрешен в объявлениях функций интерфейса. Начиная с апреля
2005 года, предшествующему выпуску PHP 5.0b1, также разрешен модификатор
static. Однако модификаторы
protected и private теперь генерируют
ошибку уровня E_ERROR
, также как
abstract. Обратите внимание, что данное изменение
не должно повлиять на существующий код,
так как ни один из модификаторов не имеет смысла в контексте интерфейсов.
В PHP 5.0 было возможно объвить функцию в производном классе, которая не соответствовала объявлению этой же функции в базовом классе, например.
Этот код выдаст ошибку уровня E_STRICT
с 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;
}
}
?>
В PHP 5.0.x следующий код корректный:
С PHP 5.1.x повторное определение константы класса выдаст
ошибку уровня E_ERROR
.
<?php
class test {
const foobar = 'foo';
const foobar = 'bar';
}
?>