Несмотря на то, что большинство кода на PHP 4 должно работать безо всяких изменений, вам следует обратить внимание на следующие изменения, повлекшие за собой обратную несовместимость:
E_ERROR
вместо E_WARNING
.
Пример неправильного использования:
$str = 'abc'; unset($str[0]);.
E_WARNING
для каждого такого параметра. Будьте
внимательны, потому что ваш код может вдруг начать генерировать
ошибки E_WARNING
.
PATH_TRANSLATED
больше не определяется неявно под
Apache2 SAPI, в отличие от ситуации в PHP 4, где ей присваивается то же
значение, что и переменной сервера SCRIPT_FILENAME
, когда она
не определяется Apache. Это изменение было сделано для соответствия » спецификации CGI/1.1. Пожалуйста, обратитесь к » ошибке #23610 для получения дальнейший информации,
а также посмотрите описание $_SERVER['PATH_TRANSLATED']
в данном руководстве. Это изменение также имеет место в PHP
версий >= 4.3.2.
T_ML_COMMENT
больше
не объявляется расширением Tokenizer. Если
директива error_reporting установлена в E_ALL
, PHP
сгенерирует предупреждение. Несмотря на то, что
T_ML_COMMENT
не использовалась вообще, она
была объявлена в PHP 4. Как в PHP 4, так и в PHP 5
// и /* */ определяются как T_COMMENT
.
Так или иначе, комментарии /** */ в стиле PHPDoс,
которые начиная с PHP 5 анализируются PHP, распознаются как
T_DOC_COMMENT
.
__CLASS__
,
__METHOD__
и __FUNCTION__
.
Значения возвращаются именно в том виде, в котором они были объявлены (с учетом регистра).
FALSE
,
а не -1, если в качестве аргумента функции
передается неправильный IP-адрес.
Пример #1 strrpos() и strripos() теперь используют в качестве искомого параметра (needle) всю строку
<?php
var_dump(strrpos('ABCDEF','DEF')); //int(3)
var_dump(strrpos('ABCDEF','DAF')); //bool(false)
?>
Пример #2 Объект без свойств больше не считается "пустым"
<?php
class test { }
$t = new test();
var_dump(empty($t)); // echo bool(false)
if ($t) {
// Будет выполнено
}
?>
Пример #3 В некоторых случаях классы должны быть объявлены перед использованием
<?php
//работает без ошибок:
$a = new a();
class a {
}
//вызывает ошибку:
$a = new b();
interface c{
}
class b implements c {
}
?>