Bien que la plupart des scripts PHP 4 existants devraient fonctionner, il convient de noter quelques incompatibilités avec les versions antérieures de PHP :
E_ERROR
au lieu d'un
message E_WARNING
auparavant.
Voici un exemple incorrect :
$str = 'abc'; unset($str[0]);.
E_WARNING
sera
envoyé. Soyez attentifs car votre script pourrait émettre des
E_WARNING
de façon inopinée.
PATH_TRANSLATED
n'est plus définie implicitement
avec Apache2 SAPI contrairement à auparavant (PHP 4) où elle était fixée
avec la même valeur que SCRIPT_FILENAME
lorsqu'Apache ne
la renseignait pas. Cette modification a été apportée afin d'être
en conformité avec les » spécifications CGI/1.1. Merci de consulter
le » bogue #23610 pour plus
d'informations, ainsi que la description de
$_SERVER['PATH_TRANSLATED']
du manuel. Ce problème affecte également PHP >= 4.3.2.
T_ML_CONSTANT
n'est plus
définie par l'extension Tokenizer.
Si error_reporting est réglée à E_ALL
, PHP va
générer un avertissement. Bien que T_ML_CONSTANT
n'ait jamais été utilisée, elle était définie dans PHP 4. Avec PHP 4
et PHP 5, // et /* */ sont assimilés à la constante
T_COMMENT
.
Toutefois les commentaires de style PHPDoc /** */,
qui sont analysés depuis PHP 5, sont reconnus en tant que
T_DOC_COMMENT
.
__CLASS__
,
__METHOD__
et __FUNCTION__
.
Les valeurs sont retournées exactement comme elles ont été déclarées
(sensible à la casse).
FALSE
lorsqu'une adresse IP invalide est entrée comme argument de la fonction,
et non plus -1.
Exemple #1 strrpos() et strripos() recherchent maintenant une chaîne de caractères dans une autre
<?php
var_dump(strrpos('ABCDEF','DEF')); //int(3)
var_dump(strrpos('ABCDEF','DAF')); //bool(false)
?>
Exemple #2 Un objet sans propriété n'est plus considéré comme vide (empty())
<?php
class test { }
$t = new test();
var_dump(empty($t)); // echo bool(false)
if ($t) {
// Cette portion de code sera exécutée
}
?>
Exemple #3 Dans certains cas, les classes doivent être déclarées avant d'être utilisées
<?php
// fonctionne sans erreur :
$a = new a();
class a {
}
// ici, une erreur :
$a = new b();
interface c{
}
class b implements c {
}
?>