Ecrire du code conforme à E_ALL
Référence sur drupal.org : 9 Avril 2009 – 01h34 - http://drupal.org/node/34341
E_ALL : une meilleure pratique
Actuellement, le code Drupal n’est pas coforme E_STRICT. Quand vous faites tourner un site Drupal avec E_ALL, chaque page crée des tonnes de messages d’erreurs. Beaucoup de développeurs Drupal pensent qu’il serait bon que le code Drupal soit mis en conformité avec les bonnes pratiques couramment admises.
Le but de ce document est double :
- Montrer comment des erreurs courantes de programmation empêchent Drupal d’être conforme à E_STRICT
- Fournir de meilleures règles de programmation pour le code nouveau et les patches.
Une fois que ces règles seront acquises, ce ne sera plus qu’une question de temps, et d’efforts pour les développeurs, pour que tout le code antérieur soit corrigé. Nous pourrons ensuite faire tourner Drupal avec la directive E_ALL.
Erreurs de programmation courantes et nouvelles habitudes
Utilisation de if (isset($var)) ou if (!empty($var))
Si vous voulez vérifier qu’un tableau a bien reçu une valeur, ne faites pas :
<?php
if ($foo) {}
?>mais faites plutôt :
<?php
// either
if (isset($foo)) {} // $foo=0 (zero) and $foo= '' return TRUE
// or
if (!empty($foo)) {} // use this when 0 or '' are not expected
// and are not valid values for $foo.
?>La différence entre isset() et !empty() est qu’à l’inverse de !empty(), isset() renverra TRUE même si la variable a été initialisée avec une chaîne vide ou l’entier 0. Pour déterminer quelle fonction utiliser, étudiez si 0 ou '' sont des valeurs possibles pour votre variable.
Le code suivant est incorrect :
<?php
function _form_builder($form, $parents = array(), $multiple = FALSE) {
// (...)
if ($form['#input']) {
// some code (...)
}
}
?>Ici, la variable $form est passée à la fonction. Si $form['#input'] a été initialisé avec n’importe quelle valeur, some code est exécuté. Le problème est qu’en testant de cette façon, cela affiche le message d’erreur suivant :
Même si le tableau $form est déjà déclaré et passé à la fonction, chaque index doit exlicitement être déclaré. Le code précédent devrait plutôt être écrit comme ceci :
<?php
function _form_builder($form, $parents = array(), $multiple = FALSE) {
// (...)
if (!empty($form['#input'])) {
// some code (...)
}
}
?>Attention !
La fonction isset() renvoie TRUE quand la variable est initialisée avec l’entier 0, mais FALSE lorsqu’elle l’est avec la valeur NULL. Dans certains cas, is_null() est préférable, surtout lorsqu’il s’agit de tester une valeur retournée par une requête SQL.
Tester les messages d’erreurs
Si vous voulez aider au nettoyage du code Drupal pour qu’il soit confome à E_STRICT, vous pouvez paramétrer un site de test et modifier le fichier includes/common.inc :
<?php
if ($errno & (E_ALL ^ E_NOTICE)) {
?>en :
<?php
if ($errno & (E_ALL )) {
?>- Version imprimable
- 2406 lectures
-

Commentaires
Poster un nouveau commentaire