CactusCrew

CactusCrew
 
PEAR HTML_QuickForm_element::_findValue() sans eval

Voici une proposition de code afin de remplacer l'appel à eval dans HTML_QuickForm_element::_findValue()

Suite à mon précédent billet.

Code de la méthode
<?php
function _findValue(&$values)
    {
        if (empty($values)) {
            return null;
        }
        // extrait les sous elements de l'element : element[foo][bar]
	preg_match_all('/([^\[|\]]+)/', $this->getName(), $A_element);
        $return	= $values;
        // boucle sur la liste  des "elements"
        foreach ($A_element[0] as $S_element) {
        	// si l'element existe dans le tableau de retour
		if (isset($return[$S_element])) {
			$return	= $return[$S_element];
		} else {
			$return	= null;
			break;
		}
        }
        return $return;
    }
?>
Performances

Au final, cette méthode s'avère moins gourmande en ressource qu'avec eval.
J'ai effectué des benchs(source) des 2 méthodes, avec PEAR Benchmark, sur une centaine d'itérations :

J'obtiens une meilleure moyenne d'exécution sans eval.

Peut cela peut-il convaincre un éventuel développeur chez PEAR ;)...

 
PDF
« retour à l'accueil
Commentaires
1.   Bertrand Mansion  |  mercredi 16 août 2006 à 11:08

On ne change plus rien dans QuickForm, surtout à ce niveau. Si la fonction actuelle fonctionne bien, on ne va pas prendre le risque de la modifier et d'introduire des problèmes pour certains utilisateurs. En revanche, cette proposition vient à point pour QuickForm2 qui disposera d'une batterie de tests unitaires, ce qui permettra d'être sûr que tout fonctionne correctement. Ta proposition ressemble beaucoup à ce que nous faisons déjà dans QF2 pour générer les id des éléments ;) Effectivement, ça permet d'éviter l'usage des eval().

 
2.   Nicolas SUPRIN  |  mercredi 16 août 2006 à 11:18

Je comprend bien pour l'ancienne version ;) Je vais donc patienter.
Et je suis bien content d'être dans la même optique que vous pour la future version, que j'attends avec impatience !
Merci de vous être penché sur le problème :)

 
« retour à l'accueil
Trackbacks

Aucun trackback.

Les trackbacks pour ce billet sont fermés.

 
Ajouter un commentaire

Les commentaires pour ce billet sont fermés.