Voilà, voilà... Fin de l'aventure...

 

Fermeture de kolossaldrupal.org dans...


Bonjour tout le monde,

Drupal évolue, les versions changent et Kolossaldrupal.org était essentiellement consacré à la version 6 de Drupal.

Autant dire que les infos présentées ici commencent à dater...

Faute de temps, je ne peux plus garder le site Kolossaldrupal à jour...

Je vous aurais bien proposé de reprendre le flambeau mais... c'est tellement simple de nos jours de se faire son propre site à soi...Pourquoi s'embêter alors ? :-)

Ce site restera donc en l'état, tel qu'il était en 2011...

Ah la la ! Cela ne nous rajeunit pas !

Manuel Vila - Avril 2016

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 :

  1. Montrer comment des erreurs courantes de programmation empêchent Drupal d’être conforme à E_STRICT
  2. 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 :

notice: Undefined index:  #input in includes/form.inc on line 194.

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 )) {
?>