Première astuce à propos des Refactoring en "transistion".

Le renommage des fonctions et variables est une tâche courante de refactoring.

Voici une technique douce quand on ne peut être sur de renommer partout d'un coup. (Il arrive qu'un search and replace puisse causer des "dégâts", qu'il faille vérifier au cas par cas.

Je l'ai fortement utilisée pour la transformation qui effectuaient un affichage et que je voulais transformer en return.

Typiquement

<?php 
 
/**
 *
 * affiche la chaine  à propos de foo
 *
 * @return true;
 */
 
function print_foo()
{
 
   echo 'foo';
   return true; //<- souvent manquant ceci dit
}
 
// devient 
 
/** 
 * construit la chaîne  à propos de foo
 * 
 * @return string chaîne  à propos de foo
 *
 */
function getHtml_foo()
{
   $html = 'foo';
   return $html; 
}
?>

Le problème rencontré c'est tout ces print_foo() qui trainent dans le code.

Généralement je laisse les deux fonctions, très proches dans le fichier.

La nouvelle fonction fait le boulot, l'ancienne demande à la nouvelle de sous-traiter et logue avec un trigger_error le fait qu'on l'utilise encore.

J'ai ai mis un peu trop dans le trigger, je vous conseille les 4 premiers morceaux

[php]
<?php 

/**
 *
 * Affiche la chaine construite à propos de foo
 *
 * Cette fonction n'est plus à utiliser.
 * utilisez un echo  print_foo();
 * L'utilisation de cette fonction est reprise dans les logs .
 *
 * @deprecated
 * @see  print_foo()
 *
 * @return true;
 */
function print_foo()
{

   $db = debug_backtrace();
   trigger_error(
     'print_foo()! is use '
    . ' funct : ' . $db[1]['function'] . '()'
    . ' file : ' . $db[1]['file'] 
    . ' line : ' . $db[1]['line'] 
 #  . 'PHP_SELF : '.$_SERVER['PHP_SELF']
 #  . date('Y-m-d H:i:s') . "\n"
 #  . $_SERVER['SERVER_ADDR'] . "\n"
 #  . $_SERVER['REQUEST_URI'] . "\n"
   , E_USER_WARNING);

   echo getHtml_foo();
   return true; 
}
?>

Ensuite tous les matins un petit grep sur le log

grep print_foo | cut pour retirer les dates | sort -u

retourne la liste du boulot pour la journée :) vous en attaquez 3 par jour et ça va avancer tout seul.

Si vous travaillez avec une communauté open source, il n'est pas bête de publier cette liste, et de récolter les patches.

Un autre cas d'utilisation : un fichier qui ne devrait plus être utilisé.

Vous pouvez le retirer simplement de votre serveur et subir les foudres s'il est encore appelé quelque part et que son absence provoque un fatal error ou alors lui mettre un espion.

[php]
<?php 

mail( 'christophe@gesche.org'
    , 'ce foutu fichier reste appelé ici !!!!!'
    , 'PHP_SELF : '.$_SERVER['PHP_SELF']
    . "\n"
    . date('Y-m-d H:i:s') . "\n"
    . $_SERVER['SERVER_ADDR'] . "\n"
    . $_SERVER['REQUEST_URI'] . "\n"
    . var_export(debug_backtrace(),1)
    . "\n"
    
    );
    
    trigger_error( 'ce foutu fichier reste appelé ici !!!!!'.$_SERVER['SERVER_ADDR'] .' ' .date('Y-m-d H:i:s'),E_USER_WARNING);
?>