<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Commentaires sur : Instancier un objet dynamiquement sans eval()</title>
	<atom:link href="http://www.glagla.org/weblog/2008/03/05/instancier-un-objet-dynamiquement-sans-eval/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.glagla.org/weblog/2008/03/05/instancier-un-objet-dynamiquement-sans-eval/</link>
	<description>Le blog sans prétentions d&#039;Olivier Mansour</description>
	<lastBuildDate>Tue, 07 Feb 2012 21:45:03 +0200</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>Par : Martin</title>
		<link>http://www.glagla.org/weblog/2008/03/05/instancier-un-objet-dynamiquement-sans-eval/comment-page-1/#comment-725</link>
		<dc:creator>Martin</dc:creator>
		<pubDate>Thu, 06 Mar 2008 08:24:11 +0000</pubDate>
		<guid isPermaLink="false">http://www.glagla.org/weblog/2008/03/05/instancier-un-objet-dynamiquement-sans-eval/#comment-725</guid>
		<description>En même temps, il faut bien garder à l&#039;esprit que l&#039;on est sur une boucle de 400 000 itérations, et donc que toutes les solutions sont envisageable dans un cas bien précis. On ne peut pas toujours utiliser la méthode la plus rapide, et même la moins rapide utilisée avec parcimonie est tout à fait correcte.</description>
		<content:encoded><![CDATA[<p>En même temps, il faut bien garder à l&#8217;esprit que l&#8217;on est sur une boucle de 400 000 itérations, et donc que toutes les solutions sont envisageable dans un cas bien précis. On ne peut pas toujours utiliser la méthode la plus rapide, et même la moins rapide utilisée avec parcimonie est tout à fait correcte.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : Laurent Deséchalliers : &#8220;Tech&#8221;Blog &#187; [Veille&#62;Dev] PHP : Bench de la function eval()</title>
		<link>http://www.glagla.org/weblog/2008/03/05/instancier-un-objet-dynamiquement-sans-eval/comment-page-1/#comment-724</link>
		<dc:creator>Laurent Deséchalliers : &#8220;Tech&#8221;Blog &#187; [Veille&#62;Dev] PHP : Bench de la function eval()</dc:creator>
		<pubDate>Thu, 06 Mar 2008 08:19:56 +0000</pubDate>
		<guid isPermaLink="false">http://www.glagla.org/weblog/2008/03/05/instancier-un-objet-dynamiquement-sans-eval/#comment-724</guid>
		<description>[...] A voir sur glagla.org [...]</description>
		<content:encoded><![CDATA[<p>[...] A voir sur glagla.org [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : Olivier Mansour</title>
		<link>http://www.glagla.org/weblog/2008/03/05/instancier-un-objet-dynamiquement-sans-eval/comment-page-1/#comment-723</link>
		<dc:creator>Olivier Mansour</dc:creator>
		<pubDate>Thu, 06 Mar 2008 07:06:23 +0000</pubDate>
		<guid isPermaLink="false">http://www.glagla.org/weblog/2008/03/05/instancier-un-objet-dynamiquement-sans-eval/#comment-723</guid>
		<description>Merci pour vos commentaires et les compléments de test. 

@LaurentJ, je suis tout de même étonné du rapport entre les deux temps de mon script, je m&#039;attendais à un rapport 2, pas 6 !</description>
		<content:encoded><![CDATA[<p>Merci pour vos commentaires et les compléments de test. </p>
<p>@LaurentJ, je suis tout de même étonné du rapport entre les deux temps de mon script, je m&#8217;attendais à un rapport 2, pas 6 !</p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : Gérald</title>
		<link>http://www.glagla.org/weblog/2008/03/05/instancier-un-objet-dynamiquement-sans-eval/comment-page-1/#comment-721</link>
		<dc:creator>Gérald</dc:creator>
		<pubDate>Wed, 05 Mar 2008 13:40:52 +0000</pubDate>
		<guid isPermaLink="false">http://www.glagla.org/weblog/2008/03/05/instancier-un-objet-dynamiquement-sans-eval/#comment-721</guid>
		<description>Tient, le code est mal passé dans les commentaires..... un strip tags qui doit traîner :-)

Pour résumer, dans le premier cas j&#039;effectue un new ReflectionClass ($class_name) à chaque passage dans le foreach, en plus de l&#039;appel à la méthode newInstance (). Dans le deuxième cas, je ne fais qu&#039;appeler la méthode newInstance () en ayant au préalable instancié la ReflectionClass.

Dans tous les cas donc, new $class_name est plus rapide.</description>
		<content:encoded><![CDATA[<p>Tient, le code est mal passé dans les commentaires&#8230;.. un strip tags qui doit traîner :-)</p>
<p>Pour résumer, dans le premier cas j&#8217;effectue un new ReflectionClass ($class_name) à chaque passage dans le foreach, en plus de l&#8217;appel à la méthode newInstance (). Dans le deuxième cas, je ne fais qu&#8217;appeler la méthode newInstance () en ayant au préalable instancié la ReflectionClass.</p>
<p>Dans tous les cas donc, new $class_name est plus rapide.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : Antoine</title>
		<link>http://www.glagla.org/weblog/2008/03/05/instancier-un-objet-dynamiquement-sans-eval/comment-page-1/#comment-720</link>
		<dc:creator>Antoine</dc:creator>
		<pubDate>Wed, 05 Mar 2008 11:31:25 +0000</pubDate>
		<guid isPermaLink="false">http://www.glagla.org/weblog/2008/03/05/instancier-un-objet-dynamiquement-sans-eval/#comment-720</guid>
		<description>@Gerald, pris de cours, je terminais mes tests :)</description>
		<content:encoded><![CDATA[<p>@Gerald, pris de cours, je terminais mes tests :)</p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : Antoine</title>
		<link>http://www.glagla.org/weblog/2008/03/05/instancier-un-objet-dynamiquement-sans-eval/comment-page-1/#comment-719</link>
		<dc:creator>Antoine</dc:creator>
		<pubDate>Wed, 05 Mar 2008 11:13:31 +0000</pubDate>
		<guid isPermaLink="false">http://www.glagla.org/weblog/2008/03/05/instancier-un-objet-dynamiquement-sans-eval/#comment-719</guid>
		<description>@Chris, je n&#039;ai pas de retour chariot si je termine mes scripts. Je ne dirais pas que c&#039;est mieux de ne pas fermer ses scripts par contre...</description>
		<content:encoded><![CDATA[<p>@Chris, je n&#8217;ai pas de retour chariot si je termine mes scripts. Je ne dirais pas que c&#8217;est mieux de ne pas fermer ses scripts par contre&#8230;</p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : Gérald</title>
		<link>http://www.glagla.org/weblog/2008/03/05/instancier-un-objet-dynamiquement-sans-eval/comment-page-1/#comment-718</link>
		<dc:creator>Gérald</dc:creator>
		<pubDate>Wed, 05 Mar 2008 10:52:24 +0000</pubDate>
		<guid isPermaLink="false">http://www.glagla.org/weblog/2008/03/05/instancier-un-objet-dynamiquement-sans-eval/#comment-718</guid>
		<description>Pour compléter les tests, voici ce que ça donne avec l&#039;api Reflection

 $start_time = microtime(true);
 for ($i=0; $i newInstance ();
 }
 $end_time = microtime(true);
 
 echo &#039;time taken (new Reflection)        : &#039;.($end_time-$start_time).&#039; s&#039;.&quot;\n&quot;;

 $start_time = microtime(true);
 $reflection = new ReflectionClass ($class_name);
 for ($i=0; $i newInstance ();
 }
 $end_time = microtime(true);
 
 echo &#039;time taken (keeped Reflection)        : &#039;.($end_time-$start_time).&#039; s&#039;.&quot;\n&quot;;

 time taken (with eval) : 9.55426383018 s 
 time taken (no eval) : 0.662239074707 s 
 time taken (new Reflection) : 4.30600905418 s 
 time taken (keeped Reflection object) : 1.75258493423 s</description>
		<content:encoded><![CDATA[<p>Pour compléter les tests, voici ce que ça donne avec l&#8217;api Reflection</p>
<p> $start_time = microtime(true);<br />
 for ($i=0; $i newInstance ();<br />
 }<br />
 $end_time = microtime(true);</p>
<p> echo &#8216;time taken (new Reflection)        : &#8216;.($end_time-$start_time).&#8217; s&#8217;.&nbsp;&raquo;\n&nbsp;&raquo;;</p>
<p> $start_time = microtime(true);<br />
 $reflection = new ReflectionClass ($class_name);<br />
 for ($i=0; $i newInstance ();<br />
 }<br />
 $end_time = microtime(true);</p>
<p> echo &#8216;time taken (keeped Reflection)        : &#8216;.($end_time-$start_time).&#8217; s&#8217;.&nbsp;&raquo;\n&nbsp;&raquo;;</p>
<p> time taken (with eval) : 9.55426383018 s<br />
 time taken (no eval) : 0.662239074707 s<br />
 time taken (new Reflection) : 4.30600905418 s<br />
 time taken (keeped Reflection object) : 1.75258493423 s</p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : Chris</title>
		<link>http://www.glagla.org/weblog/2008/03/05/instancier-un-objet-dynamiquement-sans-eval/comment-page-1/#comment-717</link>
		<dc:creator>Chris</dc:creator>
		<pubDate>Wed, 05 Mar 2008 10:11:38 +0000</pubDate>
		<guid isPermaLink="false">http://www.glagla.org/weblog/2008/03/05/instancier-un-objet-dynamiquement-sans-eval/#comment-717</guid>
		<description>@Antoine : la balise de fermeture n&#039;est pas obligatoire. C&#039;est même mieux d&#039;ailleurs de ne pas l&#039;utiliser pour éviter un retour chariot intempestif en fin de fichier, qui serait envoyé directement sur la sortie standard. Symfony a adopté cette pratique par exemple.</description>
		<content:encoded><![CDATA[<p>@Antoine : la balise de fermeture n&#8217;est pas obligatoire. C&#8217;est même mieux d&#8217;ailleurs de ne pas l&#8217;utiliser pour éviter un retour chariot intempestif en fin de fichier, qui serait envoyé directement sur la sortie standard. Symfony a adopté cette pratique par exemple.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : Laurentj</title>
		<link>http://www.glagla.org/weblog/2008/03/05/instancier-un-objet-dynamiquement-sans-eval/comment-page-1/#comment-716</link>
		<dc:creator>Laurentj</dc:creator>
		<pubDate>Wed, 05 Mar 2008 09:21:10 +0000</pubDate>
		<guid isPermaLink="false">http://www.glagla.org/weblog/2008/03/05/instancier-un-objet-dynamiquement-sans-eval/#comment-716</guid>
		<description>Oui c&#039;est totalement logique, quand on sait que l&#039;évaluation d&#039;un script PHP se fait en deux phases : transformation du code source en bytecode, puis évaluation du bytecode.

Avec eval, on a à chaque itération les deux phases. Tandis qu&#039;en faisant un new direct, on a que la deuxième phase, l&#039;instruction dans la boucle ayant déjà été transformé en bytecode avant l&#039;execution globale du bytecode du script.</description>
		<content:encoded><![CDATA[<p>Oui c&#8217;est totalement logique, quand on sait que l&#8217;évaluation d&#8217;un script PHP se fait en deux phases : transformation du code source en bytecode, puis évaluation du bytecode.</p>
<p>Avec eval, on a à chaque itération les deux phases. Tandis qu&#8217;en faisant un new direct, on a que la deuxième phase, l&#8217;instruction dans la boucle ayant déjà été transformé en bytecode avant l&#8217;execution globale du bytecode du script.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : Antoine</title>
		<link>http://www.glagla.org/weblog/2008/03/05/instancier-un-objet-dynamiquement-sans-eval/comment-page-1/#comment-715</link>
		<dc:creator>Antoine</dc:creator>
		<pubDate>Wed, 05 Mar 2008 08:27:25 +0000</pubDate>
		<guid isPermaLink="false">http://www.glagla.org/weblog/2008/03/05/instancier-un-objet-dynamiquement-sans-eval/#comment-715</guid>
		<description>Salut,

il manque une balise de fermeture à ton script. Aussi, il est sans doute utile de préciser que faire new $class_name() ne prends pas plus de temps que de faire new toto().

La fonction call_user_func est un bon compromis pour ce genre de chose. Par exemple, sur mon serveur : 
time taken (with eval)      : 2.98381304741 s
time taken (no eval)        : 0.30176615715 s
time taken (call_user_func) : 0.819909095764 s

Antoine</description>
		<content:encoded><![CDATA[<p>Salut,</p>
<p>il manque une balise de fermeture à ton script. Aussi, il est sans doute utile de préciser que faire new $class_name() ne prends pas plus de temps que de faire new toto().</p>
<p>La fonction call_user_func est un bon compromis pour ce genre de chose. Par exemple, sur mon serveur :<br />
time taken (with eval)      : 2.98381304741 s<br />
time taken (no eval)        : 0.30176615715 s<br />
time taken (call_user_func) : 0.819909095764 s</p>
<p>Antoine</p>
]]></content:encoded>
	</item>
</channel>
</rss>

