PHP 5.3 : Reporting d'erreurs : E_DEPRECATED
21 octobre 2008 —Les exemples correspondant à ce point se trouvent dans le répertoire "e_deprecated".
Que serait une nouvelle version de PHP sans un nouveau niveau d'erreurs ?
Sommaire :
- Nouveau niveau de rapport d'erreurs : E_DEPRECATED
- Quelques exemples de plus
- N'ignorez pas ces avertissements
Nouveau niveau de rapport d'erreurs : E_DEPRECATED
PHP 5.3 introduit un nouvel error level : E_DEPRECATED
.
Ce niveau d'erreur a pour but de vous permettre d'identifier plus facilement les fonctions de PHP considérées comme dépréciées, qui seront probablement supprimées lors de la sortie d'une future version -- typiquement, lors de la sortie de PHP 6.0.
Exemple de la fonction dl
Par exemple, en activant de le reporting d'erreurs E_DEPRECATED
, que ce soit à l'aide de la directive error_reporting
de votre fichier php.ini, ou en passant par la fonction error_reporting
, la portion de code suivante léverait une erreur :
// La fonction "dl" est dépréciée en PHP 5
dl('monextension.so');
Vous obtiendrez le résultat suivant :
En effet, la fonction dl est marquée comme dépréciée à partir de PHP 5.3, du moins lorsque PHP est utilisé en tant que module Apache.
Notez tout de même que cet exemple lèvera aussi l'avertissement suivant :
Vous vous en doutez, ceci est dû fait que l'extension monextension.so n'existe pas ; le résultat serait le même avec une extension existante (curl
, soap
, xdebug
, ...) -- mais sans cet avertissement ^^
Quelques exemples de plus
Nous avons vu que la fonction dl
était dépréciée en PHP 5.3.
Je ne dresserai pas une liste exhaustive des fonctions qui sont à présent marquées comme telles, mais voici déjà deux exemples de plus :
set_magic_quotes_runtime
La méthode set_magic_quotes_runtime
est marquée comme dépréciée -- son appel lèvera un avertissement de niveau E_DEPRECATED
.
En conséquence, avec la portion de code suivante :
<?php
var_dump(set_magic_quotes_runtime(1));
vous obtiendrez une sortie de ce genre :
Cette fonctionnalité disparaitra probablement d'ici PHP 6 ; je vous laissez consulter la RFC Magical Quotes in PHP.
Paramètres passés par référence à l'appel d'une fonction
Depuis déjà quelques années, le passage de paramètres par référence ne doit pas être effectué en utilisant un &
à l'appel d'une fonction, mais à la déclaration de celle-ci.
Typiquement, prenons la portion de code suivante :
$a = 1; $b = 2;
f($a, & $b);
var_dump($a, $b);
function f($a, $b) {
$a *= 2;
$b *= 3;
}
En PHP 5.2, exécuter cette portion de code provoque l'affichage d'un avertissement :
Ce comportement étant en fait déprécié, cet avertissement a fort logiquement été remplacé, en PHP 5.3, par un erreur de niveau E_DEPRECATED
.
En exécutant la même portion de code sur une machine sous PHP 5.3, on obtient :
Ici encore, pour plus d'informations, n'hésitez pas à consulter la RFC allow_call_time_pass_reference !
N'ignorez pas ces avertissements
Libre à vous, aujourd'hui, d'ignorer ces messages, en vous disant que votre application est développée pour PHP 5.x, et que les messages de niveau E_DEPRECATED
ne vous concernent pas, puisqu'ils annoncent des fonctions qui devraient disparaitre loin dans le futur -- probablement en PHP 6...
Mais si vous en avez l'occasion, pourquoi ne pas corriger ces points ? Après tout, qui dit fonction dépréciée dit fonction plus vraiment maintenue...
Et en même temps, selon l'application sur laquelle vous travaillez, est-ce qu'il ne serait pas intéressant qu'elle fonctionne encore en PHP 6 ?
Et enfin, si ça peut réduire le nombre de machines qui seront encore en PHP 5.3 dans des années, alors que PHP 5.x sera totalement obsolète, ça ne peut être qu'une bonne idée ^^ (Pensez aux applications encore en production aujourd'hui sur des plates-formes PHP 4... Alors que PHP 4 n'est plus maintenu !)