Manuel PHP
Précédent | Annexe B. Migration de `PHP` 4 vers `PHP` 5 | Suivant

# Incompatibilités avec les version antérieures

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` :

- strrpos() et strripos() utilisent maintenant la chaîne de caractères complète (un seul caractère auparavant) en tant qu'élément de recherche.

- L'utilisation d'offsets illégaux sur une chaîne de caractère entraîne maintenant un message `E_ERROR` au lieu d'un message `E_WARNING` auparavant.

- array_merge() a été modifié pour n'accepter que des tableaux. Pour chaque variable passée en paramètre autre qu'un tableau, un message `E_WARNING` sera envoyé. Soyez attentifs car votre script pourrait émettre des `E_WARNING` de façon inopinée.

- La variable de serveur 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 specifications CGI. Merci de consulter le bug #23610 pour plus d'informations.

- La constante `T_ML_CONSTANT` n'est plus définie par l'extension Tokenizer. Si error_reporting est réglé à `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 `PHP`Doc /** */ , qui sont parsés depuis `PHP` 5, sont reconnus en tant que `T_DOC_COMMENT`.

- $_SERVER est maintenant renseigné avec argc and argv si votre variables_order inclus "S". Si vous avez configuré votre système pour qu'il ne créé pas $_SERVER, il ne seront bien sûr pas renseignés. Cette modification à été effectuée afin que argc et argv soient toujours accessibles dans la version CLI quelque soit la valeur de variables_order. Ainsi, la version CLI renseignera dorénavant toujours les variables $argc et $argv.

- Un objet sans propriété n'est plus considéré comme vide, "empty".

- Les classes doivent être déclarées avant d'être utilisées

Exemple B-1. strrpos() et strripos() utilisent maintenant une chaîne de caractère en tant que needle

`<?php var_dump(strrpos('ABCDEF','DEF')); //int(3) var_dump(strrpos('ABCDEF','DAF')); //bool(false) ?>`

Exemple B-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 } ?>`

L'exemple ci-dessous fonctionnait avec `PHP` 4, il entraîne une erreur fatale avec `PHP` 5.

Exemple B-3. Les classes doivent être déclarées avant d'être utilisées

`<?php $test = new fubar(); $test->barfu(); class fubar { function barfu() { echo 'fubar'; } } ?>`

Précédent | Sommaire | Suivant
Migration de `PHP` 4 vers `PHP` 5 | Niveau supérieur | CLI et CGI