The 2007-11-25 at 16:39 by Loïc d'Anterroches filed under Pluf - Framework en PHP5.
Vous connaissez la règle de base du développement logiciel : Ne pas réinventer la roue.
Grosso modo, si vous pouvez utiliser un système déjà existant et de qualité, c’est le mieux. La qualité des bibliothèques disponibles via le projet PEAR n’est pas égale. Il en existe d’excellentes, d’autres plutôt médiocres. Une de qualité est Mail et Mail_mime pour envoyer des emails.
J’ai donc décider de réécrire Pluf_Mail pour profiter de cette bibliothèque. Par contre, PEAR n’a pas complètement migré vers PHP5, ce qui donne des erreurs du type E_STRICT et comme je code avec E_ALL, cela veut dire que mon code s’arrête sur ces erreurs.
La solution pour ne pas avoir à changer ma gestion des erreurs fut de ne pas considérer les erreurs E_STRICT venant de PEAR via mon propre gestionnaire d’erreurs. Voici le début, simplifié, du code :
function PlufErrorHandler($code, $string, $file, $line)
{
if (E_STRICT == $code &&
0 === strpos($file, '/usr/share/php/')) {
return;
}
... ici la suite
}
En gros, si j’ai une erreur E_STRICT et que le fichier vient de là où est PEAR, je laisse couler… simple et élégant, car les erreurs E_STRICT de Pluf seront bien affichées.
Comments from readers
loïc m. said:
Mais est-ce que cette solution est assez généraliste ?
Car comme moi par exemple, travaillant sous Max OS X avec une solution MAMP, mon dossier PEAR ne se trouve pas dans le même répertoire que toi.
Pourquoi ne pas utiliser seulement le dossier PEAR plutôt que d'utiliser tout le chemin jusqu'à PEAR ?
Loïc said:
Dans le code réel, tu as:
function PlufErrorHandler($code, $string, $file, $line)
{
if (E_STRICT == $code &&
0 === strpos($file, Pluf::f('pear_path','/usr/share/php/'))) {
return;
}
$exception = new PlufErrorHandlerException($string, $code);
$exception->setLine($line);
$exception->setFile($file);
throw $exception;
}
Tu peux configurer le chemin vers PEAR dans la configuration de ton application. Par défaut, uniquement, cela utilise '/usr/share/php/'.
Donc, oui, cela se généralise même à Windows.