Although most existing PHP 4 code should work without changes, you should pay attention to the following backward incompatible changes:
E_ERROR
instead
of E_WARNING
. An example illegal use is:
$str = 'abc'; unset($str[0]);.
E_WARNING
will be
thrown for every such parameter. Be careful because your code may start
emitting E_WARNING
out of the blue.
PATH_TRANSLATED
server variable is no longer set implicitly under
Apache2 SAPI in contrast to the situation in PHP 4, where it is set to
the same value as the SCRIPT_FILENAME
server variable when it is not
populated by Apache. This change was made to comply with the » CGI/1.1 specification. Please refer to » bug #23610 for further information,
and see also the $_SERVER['PATH_TRANSLATED']
description in the manual. This issue
also affects PHP versions >= 4.3.2.
T_ML_COMMENT
constant is no longer defined by
the Tokenizer extension. If
error_reporting is set to E_ALL
, PHP will
generate a notice. Although the T_ML_COMMENT
was
never used at all, it was defined in PHP 4. In both PHP 4 and PHP 5
// and /* */ are resolved as the T_COMMENT
constant. However the PHPDoc style comments /** */, which starting PHP
5 are parsed by PHP, are recognized as T_DOC_COMMENT
.
__CLASS__
,
__METHOD__
, and __FUNCTION__
.
The values are returned exactly as they're declared (case-sensitive).
FALSE
when an invalid IP
address is passed as argument to the function, and no longer
-1.
Example #1 strrpos() and strripos() now use the entire string as a needle
<?php
var_dump(strrpos('ABCDEF','DEF')); //int(3)
var_dump(strrpos('ABCDEF','DAF')); //bool(false)
?>
Example #2 An object with no properties is no longer considered "empty"
<?php
class test { }
$t = new test();
var_dump(empty($t)); // echo bool(false)
if ($t) {
// Will be executed
}
?>
Example #3 In some cases classes must be declared before used
<?php
//works with no errors:
$a = new a();
class a {
}
//throws an error:
$a = new b();
interface c{
}
class b implements c {
}
?>