PEAR HTML_QuickForm_element::_findValue() sans eval
Par Nicolas SUPRIN, mercredi 16 août 2006 à 09:24 | PEAR | #52 | rss
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.





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().
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 :)
Aucun trackback.
Pour faire un trackback sur ce billet : http://www.blog.cactuscrew.com/tb.php?id=52&chk=hxllkp