<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	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/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Ze Technology &#187; Php</title>
	<atom:link href="http://www.ze-technology.com/category/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.ze-technology.com</link>
	<description>Ze Blog qui parle de Ze Technology. Univers du libre, programmation, société, business...</description>
	<lastBuildDate>Fri, 23 Jul 2010 20:21:38 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Ant pour les projets PHP</title>
		<link>http://www.ze-technology.com/2010/03/06/ant-pour-les-projets-php/</link>
		<comments>http://www.ze-technology.com/2010/03/06/ant-pour-les-projets-php/#comments</comments>
		<pubDate>Sat, 06 Mar 2010 09:58:40 +0000</pubDate>
		<dc:creator>Adrien Mogenet</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[Php]]></category>

		<guid isPermaLink="false">http://www.ze-technology.com/?p=667</guid>
		<description><![CDATA[
Bien connu des développeurs Java, Ant est un build-system, à l&#8217;instar des Makefiles, permettant d&#8217;automatiser le déploiement d&#8217;un projet. Bon nombre de projets PHP ne sont en effet pas directement utilisables tout de suite après récupération des sources, et/ou nécessitent un certain nombre d&#8217;adaptation en fonction du serveur sur lequel le projet est déployé. Voire [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-668" title="Ant" src="http://www.ze-technology.com/wp-content/uploads/2010/03/ant.jpg" alt="Ant" width="600" height="115" /></p>
<p>Bien connu des développeurs Java, <strong>Ant</strong> est un <em>build-system</em>, à l&#8217;instar des <strong>Makefiles</strong>, permettant d&#8217;automatiser le déploiement d&#8217;un projet. Bon nombre de projets PHP ne sont en effet pas directement utilisables tout de suite après récupération des sources, et/ou nécessitent un certain nombre d&#8217;adaptation en fonction du serveur sur lequel le projet est déployé. Voire même, parfois, certaines tâches de maintenances assez rébarbatives pourraient être automatisées.</p>
<h3>Je ne connais même pas Ant !</h3>
<p>Pour ceux qui ne connaissent pas du tout <strong>Ant</strong> (et je ne parle pas d&#8217;un diminutif d&#8217;Antoine&#8230;), les rouages tournent concrètement grâce à un fichier XML classiquement nommé &laquo;&nbsp;build.xml&nbsp;&raquo;, comprenant une succession de balises du style :</p>
<pre>
<pre class="brush: xml;">
&lt;target name=&quot;NOM_REGLE&quot; depends=&quot;REGLES À EFFECTUER AUPARAVANT&quot;&gt;
     &lt;actions à effectuer ... /&gt;
&lt;/target&gt;
</pre>
</pre>
<p>Une fois ce fichier XML dûment rempli, vos règles s&#8217;exécutent par le biais d&#8217;une ligne de commande, après bien entendu avoir vérifié qu&#8217;Ant était bien installé sur votre machine :<br />
<code>&gt; ant NOM_REGLE</code></p>
<p>Il y a un certain nombre d&#8217;options disponibles, il est par exemple possible d&#8217;afficher les règles disponibles et leur rôle respectif via <span class="code">ant -p</span>  pour peu que vous ayez renseigné un champ &laquo;&nbsp;description&nbsp;&raquo; dans le fichier build.xml.</p>
<h3>Bon, et pour mon projet, ça sert à quoi ?</h3>
<p>Vous manquez d&#8217;imagination ? Voici à titre d&#8217;exemple la liste de règles que j&#8217;ai définie pour <a href="http://www.piwam.org">Piwam</a> :</p>
<ul>
<li><strong>init</strong>: Créer les répertoires manquants (log, cache, build&#8230;</li>
<li><strong>cc</strong>: Vider le cache</li>
<li><strong>doc</strong>: Générer la documentation Doxygen</li>
<li><strong>up</strong>: Update SVN</li>
<li><strong>phpcpd</strong>: Cherche le code PHP dupliqué au sein du projet</li>
<li><strong>pdepend</strong>: Génère un rapport de dépendance des classes</li>
<li><strong>phpcs</strong>: Vérifie la conformité du code avec une norme donnée</li>
<li><strong>lint</strong>: Vérifie qu&#8217;aucun fichier ne contient une erreur de syntaxe</li>
<li><strong>test</strong>: Lance les tests unitaires et fonctionnels</li>
<li><strong>css</strong>: Concatène l&#8217;ensemble des fichiers CSS en un seul grand fichier CSS</li>
<li><strong>css.min</strong>: Minimise la taille du gros fichier CSS. (appelle automatiquement la règle <strong>css</strong> en amont)</li>
<li><strong>clear</strong>: Nettoie les fichiers générés</li>
<li><strong>build</strong>: Lance l&#8217;ensemble des tâches permettant de vérifier la qualité du projet</li>
</ul>
<p>je vous invite à découvrir le fichier XML correspondant sur le <a href="http://code.google.com/p/piwam/source/browse/branches/1.2/build.xml">dépôt SVN du projet</a>. Ce fichier vous permet alors d&#8217;effectuer toute une batterie d&#8217;actions de manière extrêmement simplifiée. Ant est utilisé au sein d&#8217;une multitude d&#8217;outils du monde Java, des IDE (Eclipse&#8230;) aux outils d&#8217;intégration (Hudson, CruiseControl&#8230;). En pratique, ces outils vont aller lire votre fichier build.xml et appeler les commandes correspondant aux tests (dans mon cas : phpcs, pdepend, etc.) de manière 100% automatisée afin de vous permettre de suivre l&#8217;évolution de votre projet au fil des révisions.<br />
Sur ce, je vous laisse rédiger votre propre antfile, en attendant de vous présenter comment l&#8217;exploiter au sein d&#8217;<a href="http://hudson-ci.org/">Hudson</a> dans un projet article !</p>
<h3>Liens utiles</h3>
<ul>
<li><a href="http://ant.apache.org/">http://ant.apache.org</a> : Site officiel de Ant, par la fondation Apache</li>
<li><a href="http://phing.info/">http://phing.info</a> : Alternative à Ant spécialement conçue pour les outils PHP. (Basée sur Ant)</li>
<li><a href="http://hudson-ci.org/">http://hudson-ci.org</a> : Hudson, outil d&#8217;intégration continue</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.ze-technology.com/2010/03/06/ant-pour-les-projets-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Projet de la semaine #3 : HipHop</title>
		<link>http://www.ze-technology.com/2010/02/03/projet-de-la-semaine-3-hiphop/</link>
		<comments>http://www.ze-technology.com/2010/02/03/projet-de-la-semaine-3-hiphop/#comments</comments>
		<pubDate>Wed, 03 Feb 2010 08:27:47 +0000</pubDate>
		<dc:creator>Adrien Mogenet</dc:creator>
				<category><![CDATA[Php]]></category>
		<category><![CDATA[Projet de la semaine]]></category>

		<guid isPermaLink="false">http://www.ze-technology.com/?p=645</guid>
		<description><![CDATA[
Certains d&#8217;entre vous ont peut être entendu parler d&#8217;&#160;&#187;Hyper PHP&#160;&#187;. Le nom du projet est apparemment &#171;&#160;HipHop&#160;&#187;. Il s&#8217;agit là du compilateur complètement customisé par Facebook, pour ses propres besoins liés à la scalabilité et la montée en charge.
Ce compilateur réécrit le code PHP en C++, puis le  compile avec le bien connu compilateur G++. [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-646" title="hiphop" src="http://www.ze-technology.com/wp-content/uploads/2010/02/hiphop.jpg" alt="hiphop" width="600" height="60" /></p>
<p>Certains d&#8217;entre vous ont peut être entendu parler d&#8217;&nbsp;&raquo;Hyper PHP&nbsp;&raquo;. Le nom du projet est apparemment &laquo;&nbsp;HipHop&nbsp;&raquo;. Il s&#8217;agit là du compilateur complètement customisé par Facebook, pour ses propres besoins liés à la scalabilité et la montée en charge.</p>
<p>Ce compilateur réécrit le code PHP en C++, puis le  compile avec le bien connu compilateur G++. Chez Facebook, ils nous font part d&#8217;un gain de 50% en terme d&#8217;utilisation du CPU.</p>
<p><img class="aligncenter size-full wp-image-647" title="hiphop2" src="http://www.ze-technology.com/wp-content/uploads/2010/02/hiphop2.jpg" alt="hiphop2" width="600" height="375" />Utilisé en production depuis 2 ans mais présenté seulement aujourd&#8217;hui à la communauté, le projet HipHop est d&#8217;ores et déjà disponible, n&#8217;hésitez pas à <a href="http://developers.facebook.com/hiphop-php/">l&#8217;essayer</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ze-technology.com/2010/02/03/projet-de-la-semaine-3-hiphop/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Quizz PHP : Correction</title>
		<link>http://www.ze-technology.com/2010/02/01/quizz-php-corrections/</link>
		<comments>http://www.ze-technology.com/2010/02/01/quizz-php-corrections/#comments</comments>
		<pubDate>Mon, 01 Feb 2010 16:31:22 +0000</pubDate>
		<dc:creator>Adrien Mogenet</dc:creator>
				<category><![CDATA[Php]]></category>

		<guid isPermaLink="false">http://www.ze-technology.com/?p=638</guid>
		<description><![CDATA[
Vous avez récemment découvert mon histoire d&#8217;un curieux recrutement. J&#8217;y montrais alors une portion de code PHP exemptée de bonne pratique et fourmillant d&#8217;erreurs. This might sound more complicated than playing online casino (http://www.casino.com/fr/) at first but you will soon get your head around it. Voici donc la &#171;&#160;correction&#160;&#187; que je vous propose, recensant les points [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-637" title="correction" src="http://www.ze-technology.com/wp-content/uploads/2010/02/correction.jpg" alt="correction" width="600" height="65" /></p>
<p>Vous avez récemment découvert mon <a href="http://www.ze-technology.com/2010/01/29/histoire-dun-curieux-recrutement/">histoire d&#8217;un curieux recrutement</a>. J&#8217;y montrais alors une portion de code PHP exemptée de bonne pratique et fourmillant d&#8217;erreurs. This might sound more complicated than playing online casino (<a href="http://www.casino.com/fr/">http://www.casino.com/fr/</a>) at first but you will soon get your head around it. Voici donc la &laquo;&nbsp;correction&nbsp;&raquo; que je vous propose, recensant les points que j&#8217;aurais aimé voir soulevés par les candidats :</p>
<ol>
<li>Le tag <span class="code">&lt;?php</span> dans sa version courte</li>
<li>Un code intégralement en français.</li>
<li>Pas de commentaires multi-lignes en entête de fonction</li>
<li>Pas de tags pour la génération de documentation (phpDoc, Doxygen&#8230;)</li>
<li>Pas de typage pour le paramètre <span class="code">$voiture</span> (en tant qu&#8217;objet, autant bénéficier du typage apporté par PHP)</li>
<li>Commentaires inutiles dans le code (lignes 8 et 13)</li>
<li>Mauvaise indentation</li>
<li>Problème de type pour <span class="code">$max</span></li>
<li><span class="code">If</span>/<span class="code">else</span> à problème</li>
<li>L&#8217;opérateur de comparaison pourrait être poussé à &laquo;&nbsp;<span class="code">===</span>&laquo;&nbsp;</li>
<li>Lorsque que <span class="code">$max</span> vaut &laquo;&nbsp;inconnu&nbsp;&raquo;, on pourrait préférer une constante</li>
<li>Pas d&#8217;utilisation d&#8217;ORM, utilisation de <span class="code">mysql_query</span> natif</li>
<li>Requête SQL peu lisible (mots clés en minuscules, une seule ligne&#8230;)</li>
<li>Problèmes dans la requête SQL (guillemets mal placés, le <span class="code">SET</span> est après le <span class="code">WHERE</span>)</li>
<li>Pas de protection de la requête</li>
<li><span class="code">return</span> est un mot clé, pas une fonction : on devrait omettre les parenthèses.</li>
<li>Il vaut mieux éviter d&#8217;insérer les tags de fermeture PHP</li>
<li>Vu ce que fait la fonction, ça serait sûrement mieux d&#8217;en faire une méthode au sein de la classe (mais l&#8217;analyse de ce que fait la fonction n&#8217;était pas demandé)</li>
</ol>
<p>Bravo à tous ceux qui avaient farfouillé ! Sans forcément trouver exactement tous ces points, il était sûrement aisé d&#8217;en identifier au moins 4 ou 5. Attention, ce ne sont pas forcément des erreurs, mais des points qui pourraient être discutés (les commentaires pourraient très bien être en français pour telle ou telle raison, par exemple)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ze-technology.com/2010/02/01/quizz-php-corrections/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Projet de la semaine #1 : Patchwork</title>
		<link>http://www.ze-technology.com/2009/12/07/projet-de-la-semaine-1-projet-patchwork/</link>
		<comments>http://www.ze-technology.com/2009/12/07/projet-de-la-semaine-1-projet-patchwork/#comments</comments>
		<pubDate>Mon, 07 Dec 2009 18:39:13 +0000</pubDate>
		<dc:creator>Adrien Mogenet</dc:creator>
				<category><![CDATA[Open-source]]></category>
		<category><![CDATA[Php]]></category>
		<category><![CDATA[Projet de la semaine]]></category>

		<guid isPermaLink="false">http://www.ze-technology.com/?p=446</guid>
		<description><![CDATA[Encore un framework
Vous étiez prévenu, le forum PHP 2009 fût une excellente occasion de découvrir un certain nombre de projets, apportant chacun leur lot d&#8217;innovations. Suite à la première conférence à laquelle j&#8217;ai pu assister, &#171;&#160;Optimiser PHP avec un préprocesseur&#171;&#160;, Nicolas Grekas a présenté &#8211; et tenté d&#8217;évangéliser &#8211; son framework fait maison : Patchwork.
Développé [...]]]></description>
			<content:encoded><![CDATA[<h2>Encore un framework</h2>
<p>Vous étiez prévenu, le forum PHP 2009 fût une excellente occasion de découvrir un certain nombre de projets, apportant chacun leur lot d&#8217;innovations. Suite à la première conférence à laquelle j&#8217;ai pu assister, &laquo;&nbsp;<em>Optimiser PHP avec un préprocesseur</em>&laquo;&nbsp;, Nicolas Grekas a présenté &#8211; et tenté d&#8217;évangéliser &#8211; son framework fait maison : <em>Patchwork</em>.</p>
<p>Développé en interne, <em>Patchwork</em> est né comme souvent pour résoudre certaines problématiques. Ici, c&#8217;est la portabilité et la &laquo;&nbsp;cohérence&nbsp;&raquo; des applications qui intéressent son auteur.</p>
<h3>Portabilité ?</h3>
<p>L&#8217;objectif est ici de faciliter le déploiement des applications PHP en fonction du serveur de destination. Une fonction pas disponible ? Une autre qui a un comportement différent selon la version ? À l&#8217;instar des <a href="http://fr.wikipedia.org/wiki/Autotools"><em>autotools</em></a> de l&#8217;univers C/C++, <em>Patchwork</em> permet de se prémunir contre ce genre de situations. Concrètement, voici la manière de spécialiser un appel en fonction du contexte :</p>
<p><code>/**/if (! function_exists('utf8_decode'))<br />
/**/{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function utf8_decode($string)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// ...<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
/**/}</code></p>
<h3>Cohérence ?</h3>
<p>Le mot est peut être mal choisi, mais l&#8217;idée est là. L&#8217;idée est d&#8217;homogénéiser le code en appliquant un certain nombre de règles :</p>
<ul>
<li>Le même encodage (UTF-8) partout</li>
<li>CRLF <em>vs</em> CR <em>vs</em> LF</li>
<li>&#8216;@&#8217; (opérateur de silence) ou non ?</li>
<li>Fonctions à substituer&#8230;</li>
</ul>
<p>Le dernier point s&#8217;avère utile dans bien des cas : utiliser une fonction plus optimisée, rajouter des fonctionnalités&#8230; Quelques exemples concrets de substitutions ?</p>
<p><code>rand =&gt; mt_rand<br />
md5  =&gt; hash('md5', ...)</code></p>
<p>Le préprocesseur de <em>Patchwork</em> se charge également de booster le mécanisme d&#8217;<em><a href="http://php.net/manual/fr/language.oop5.autoload.php">autoload</a> </em>de PHP5, et bien entendu place tous les résultats de compilation en cache afin de ne pas tout recalculer à chaque appel ; d&#8217;où le nom de pré-processeur. Les <em>benchmarks</em> effectués laissent apparaître un gain de performances de l&#8217;ordre de 5%.</p>
<h2>Mon avis</h2>
<p>Patchwork part d&#8217;un très bon sentiment et d&#8217;une problématique qui existe au sein de nombreux projets. C&#8217;est un projet jeune, déjà utilisé en production, et documenté (en français). <em>Patchwork</em> est une opportunité de s&#8217;amuser avec toutes les possibilités offertes par PHP5, et peut aisément servir pour &laquo;&nbsp;maintenir&nbsp;&raquo; une application vieillissante, ou sur laquelle on a peu de contrôle. En revanche, certains points pourraient être un non-sens dans bien des cas. Ainsi, la substitution de fonctions par leurs cousines plus performantes pourrait ne plus avoir de sens dès lors que l&#8217;équipe de développement intègre directement ces <em>best-practices</em>.</p>
<p>Liens :</p>
<ul>
<li><a href="http://pa.tchwork.com/wiki/Accueil">Site officiel de Patchwork</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.ze-technology.com/2009/12/07/projet-de-la-semaine-1-projet-patchwork/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Pirum, le PEAR serveur</title>
		<link>http://www.ze-technology.com/2009/11/29/pirum-le-pear-serveur/</link>
		<comments>http://www.ze-technology.com/2009/11/29/pirum-le-pear-serveur/#comments</comments>
		<pubDate>Sun, 29 Nov 2009 08:49:11 +0000</pubDate>
		<dc:creator>Adrien Mogenet</dc:creator>
				<category><![CDATA[Php]]></category>
		<category><![CDATA[Projet]]></category>

		<guid isPermaLink="false">http://www.ze-technology.com/?p=526</guid>
		<description><![CDATA[
L&#8217;acronyme pourrait laisser entendre qu&#8217;il s&#8217;agit d&#8217;un petit frère de Piwam. Pirum, est un gestionnaire de serveur de canaux PEAR réalisé par Fabien Potencier (Sensio Labs). Il y a encore quelques limitations (pas de catégories, pas d&#8217;interface web pour gérer les packages&#8230;) mais c&#8217;est tout de même largement utilisable et&#8230; utilisé ! Swift Mailer, Twig, [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-527" title="Pirum Header" src="http://www.ze-technology.com/wp-content/uploads/2009/11/Capture-d’écran-2009-11-29-à-09.30.35.png" alt="Pirum Header" width="600" height="47" /></p>
<p>L&#8217;acronyme pourrait laisser entendre qu&#8217;il s&#8217;agit d&#8217;un petit frère de <a href="http://www.piwam.org">Piwam</a>. Pirum, est un gestionnaire de serveur de canaux PEAR réalisé par Fabien Potencier (Sensio Labs). Il y a encore quelques limitations (pas de catégories, pas d&#8217;interface web pour gérer les packages&#8230;) mais c&#8217;est tout de même largement utilisable et&#8230; utilisé ! Swift Mailer, Twig, PHPUnit, <a href="http://symfony-project.com">symfony</a> et Pirum lui même utilisent cette solution. <a href="http://www.pirum-project.org/">http://www.pirum-project.org</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ze-technology.com/2009/11/29/pirum-le-pear-serveur/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Passage de Propel à Doctrine, retour d&#8217;expérience</title>
		<link>http://www.ze-technology.com/2009/11/29/passage-de-propel-a-doctrine-retour-dexperience/</link>
		<comments>http://www.ze-technology.com/2009/11/29/passage-de-propel-a-doctrine-retour-dexperience/#comments</comments>
		<pubDate>Sun, 29 Nov 2009 00:45:28 +0000</pubDate>
		<dc:creator>Adrien Mogenet</dc:creator>
				<category><![CDATA[Doctrine]]></category>
		<category><![CDATA[Php]]></category>
		<category><![CDATA[Symfony]]></category>

		<guid isPermaLink="false">http://www.ze-technology.com/?p=506</guid>
		<description><![CDATA[
Piwam est historiquement basé sur Propel. Parce qu&#8217;il est né avec symfony 1.0, et qu&#8217;à ce moment là, il &#171;&#160;fallait&#160;&#187; apprendre Propel, très en vogue.Mais la donne a changé, Doctrine est devenu l&#8217;ORM par défaut dans symfony, l&#8217;avenir du projet est bien plus certain que celui de Propel. J&#8217;ai donc décidé de changer d&#8217;ORM pour [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-507" title="Doctrine" src="http://www.ze-technology.com/wp-content/uploads/2009/11/Capture-d’écran-2009-11-29-à-00.45.40.png" alt="Doctrine" width="600" height="72" /></p>
<p><a href="http://www.piwam.org">Piwam</a> est historiquement basé sur Propel. Parce qu&#8217;il est né avec <a href="http://symfony-project.com">symfony</a> 1.0, et qu&#8217;à ce moment là, il &laquo;&nbsp;fallait&nbsp;&raquo; apprendre Propel, très en vogue.Mais la donne a changé, Doctrine est devenu l&#8217;ORM par défaut dans <a href="http://symfony-project.com">symfony</a>, l&#8217;avenir du projet est bien plus certain que celui de Propel. J&#8217;ai donc décidé de changer d&#8217;ORM pour <a href="http://www.piwam.org">Piwam</a>, et j&#8217;ai décidé de vous faire part de cette excitante expérience.</p>
<h3>Les gros changements</h3>
<p>Au premier abord, la logique de Doctrine déroute. La sélection des enregistrements se fait avec une approche de &laquo;&nbsp;méta-langage&nbsp;&raquo;, le DQL, à l&#8217;instar de ce qui se fait dans Hibernate (pour les Javatistes) et le HQL. Adepte de l&#8217;approche 100% objet, j&#8217;y trouvais là un premier reproche par rapport à un Propel clair et loin de tout langage SQL. Ainsi pour sélectionner une liste d&#8217;utilisateurs qui sont dans le groupe &laquo;&nbsp;42&#8243;, on procèdera de la sorte :</p>
<pre class="brush: php; smart-tabs: true;">class UserTable extends Doctrine_Table
{
  /**
   * Retrieve users who belong to the group $id
   *
   * @param integer $id
   * @return array of User
   */
  public static function getForGroupId($id)
  {
    $q = Doctrine_Query::create()
           -&gt;from('Member m')
           -&gt;where('m.group_id = ?', $id);

    return $q-&gt;execute();
  }
}
</pre>
<p>Finalement, cette manière de faire rappelle les habitudes prises en HQL et s&#8217;avèrent agréables à utiliser en PHP.  On notera par ailleurs que la table hérite tout de suite de <span style="font-family:courier">Doctrine_Table</span> ; nous n&#8217;avons plus accès aux méthodes statiques auto-générées par Propel (<span style="font-family:courier">doSelect(), doCount()</span>&#8230;). À vous de les ré-implémenter !</p>
<p>À l&#8217;instar de Propel, Doctrine propose de méthode pour hydrater les résultats : sous forme d&#8217;objets ou sous forme de tableaux. Remplacez alors l&#8217;appel à -&gt;execute() par -&gt;fetchArray(). Un benchmark réalisé sur <a href="http://www.amicalement-web.net/benchmark-apache-doctrine-hydrate-object-vs-array/2009/10/08/">AmicalementWeb</a> présente des gains de performances non négligeables pour la seconde méthode. Dans le cadre de <a href="http://www.piwam.org">Piwam</a>, je suis néanmoins resté sur ma gestion d&#8217;objets, pour éviter d&#8217;avoir à réécrire les templates, et parce que les performances sous <a href="http://www.piwam.org">Piwam</a> ne sont pas un point critique.</p>
<h3>Les trucs cools de Doctrine</h3>
<p>On s&#8217;aperçoit très vite qu&#8217;il y a plein de choses super cools dans Doctrine. Je veux parler par exemple de l&#8217;export / import ultra-facilité dans différents formats (XML, YML, Json), des post- et pré- méthodes, ou encore un <a href="http://www.doctrine-project.org/Doctrine_Template_Geographical/1_2">comportement géographique</a> ! La possibilité d&#8217;ajouter des plugins nous confortent encore plus quant au choix d&#8217;avoir abandonné Propel ! L&#8217;intégration à <a href="http://symfony-project.com">symfony</a> est elle aussi bien poussée, à tel point qu&#8217;il est possible d&#8217;exécuter des requêtes DQL directement depuis la ligne de commande via la tâche <span style="font-family:courier">doctrine:dql</span>.</p>
<h3>Ma méthodologie</h3>
<p>Plutôt que de &laquo;&nbsp;bidouiller&nbsp;&raquo; le fichier schema.yml de Propel, j&#8217;ai décidé de laisser Doctrine générer un nouveau schema.yml à partir de la structure actuelle de la base de donnée.<br />
<code>&gt; php <a href="http://symfony-project.com">symfony</a> doctrine:build-schema</code><br />
Après avoir renommé les noms des relations et supprimé les relations à double sens qui alourdissaient inutilement la lecture et créaient une trop forte dépendance entre les classes, en avant pour la génération des fichiers Model. Tout comme pour Propel, on dispose de tâches puissantes et explicites, avec la possibilité (youpi !) de regénérer uniquement certaines classes du modèle.</p>
<p>Vous remarquerez que le nom des classes générées a changé. Du moins, l&#8217;équivalent des classes &laquo;&nbsp;Peer&nbsp;&raquo; de Propel, maintenant suffixées par &laquo;&nbsp;Table&nbsp;&raquo; comme dans mon exemple. Vous pouvez envisager une session de chercher/remplacer automatisée dans votre liste de contrôleurs, c&#8217;est ce que j&#8217;ai fais et c&#8217;est plutôt rapide et efficace. J&#8217;ai opté pour ce choix afin de rester dans la &laquo;&nbsp;logique&nbsp;&raquo; Doctrine. L&#8217;autre solution ? Renommer ces classes avec les anciens noms donnés par Propel.</p>
<p>Si votre application comporte très majoritairement des requêtes basiques de sélection / insertion / mise à jour, la ré-écriture des méthodes est relativement rapide. MAIS, c&#8217;est relativement énervant de se voir refaire un travail déjà effectué, et assez peu automatisable, en créant de surcroît un nouveau risque d&#8217;erreur.</p>
<h3>Note d&#8217;auteur</h3>
<p>Je ne sais pas si c&#8217;est un fait ou un hasard, mais en cherchant de la documentation sur Doctrine, je suis tombé sur pléthore de sites montrant des exemples de requêtes intégrés&#8230; dans leur contrôleur. Je ne me souviens pas avoir vu autant d&#8217;horreurs en faisant des recherches Propeliennes !</p>
<h4>Le soucis des formulaires</h4>
<p>Ne prenez pas peur, c&#8217;est un tout petit soucis. Et oui, pour peu que vos formulaires intègrent de la logique &laquo;&nbsp;Propel&nbsp;&raquo; (vérification d&#8217;unicité, listes de sélections générés via des Criteria, etc.) vous allez devoir mettre à jour chacun de ces formulaires. C&#8217;est en qui me concerne la partie que je considère comme la plus énervante.</p>
<h3>Mon avis</h3>
<p>Pour conclure sur ce bref retour, qui s&#8217;est fait dans un cadre propre à un et un seul projet (<a href="http://www.piwam.org">Piwam</a>), je dirais que <em>switcher </em>de Propel vers Doctrine n&#8217;est pas anodin mais peut s&#8217;opérer sans douleur. Avoir des tests en place permet de s&#8217;assurer du fonctionnement une fois la procédure achevée. Je recommanderais à ceux qui veulent opérer de la sorte sur un projet conséquent de procéder par itérations, et d&#8217;intégrer chaque classe Propel les unes après les autres, quitte à se retrouver avec un mélange improbable de classes. Bien avant cela, je pense que la migration vers Doctrine est loin d&#8217;être systématique et que Propel n&#8217;est pas mort. Comprenez par là que si votre estimation du temps nécessaire pour migrer est bien supérieur à votre temps disponible, n&#8217;hésitez même pas et restez <em>Propeliste</em>. Au pire, commencez une nouvelle branche de votre projet avec Doctrine.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ze-technology.com/2009/11/29/passage-de-propel-a-doctrine-retour-dexperience/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Forum PHP 2009 : Les slides&#8230; et les conférences !</title>
		<link>http://www.ze-technology.com/2009/11/17/forum-php-2009-les-slides-et-les-conferences/</link>
		<comments>http://www.ze-technology.com/2009/11/17/forum-php-2009-les-slides-et-les-conferences/#comments</comments>
		<pubDate>Tue, 17 Nov 2009 08:52:30 +0000</pubDate>
		<dc:creator>Adrien Mogenet</dc:creator>
				<category><![CDATA[Php]]></category>
		<category><![CDATA[évènement]]></category>

		<guid isPermaLink="false">http://www.ze-technology.com/?p=442</guid>
		<description><![CDATA[
Ne nous arrêtons pas en si bon chemin, et diffusons, rediffusons les slides utilisés comme support lors des conférences :

Jouons avec PHP 5.3 (Fabien Potencier)
Motiver ses développeurs (Anna Filina)
Comment booster PHP ? Avec un préprocesseur ! (Nicolas Grekas)
Réalisation d&#8217;applications Desktop Windows/MacOSX (Alexandre Morgaut, Jean-Michel Biraghi)
Bonnes pratiques PHP 5 (Pascal Martin)

Et en bonus, PHP TV vient [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-455" title="PhpTV" src="http://www.ze-technology.com/wp-content/uploads/2009/11/phptv.png" alt="PhpTV" width="600" height="80" /></p>
<p>Ne nous arrêtons pas en si bon chemin, et diffusons, rediffusons les slides utilisés comme support lors des conférences :</p>
<ul>
<li><a href="http://www.slideshare.net/fabpot/playing-with-php-53">Jouons avec PHP 5.3</a> (Fabien Potencier)</li>
<li><a href="http://annafilina.com/blog/wp-content/uploads/2009/11/afup-2009-motiver-ses-developpeurs.pdf">Motiver ses développeurs</a> (Anna Filina)</li>
<li><a href="http://pa.tchwork.com/wiki/Fichier:Patchwork-preprocesseur-AFUP2009.pdf">Comment booster PHP ? Avec un préprocesseur !</a> (Nicolas Grekas)</li>
<li><a href="http://www.slideshare.net/alexandre_morgaut/presentation-forum-php-paris-2009">Réalisation d&#8217;applications Desktop Windows/MacOSX</a> (<span>Alexandre </span><span>Morgaut, Jean-Michel</span> <span>Biraghi</span>)</li>
<li><a href="http://www.slideshare.net/pascalmartin/bonnes-pratiques-de-dveloppement-en-php">Bonnes pratiques PHP 5</a> (Pascal Martin)</li>
</ul>
<p>Et en bonus, PHP TV vient de publier les conférences sous forme de fichiers <strong>audio</strong>, à découvrir <a href="http://www.phptv.fr/forum-php-2009-conferences">dès maintenant</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ze-technology.com/2009/11/17/forum-php-2009-les-slides-et-les-conferences/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Forum PHP 2009 : Quelques tweets&#8230;</title>
		<link>http://www.ze-technology.com/2009/11/13/forum-php-2009-quelques-tweets/</link>
		<comments>http://www.ze-technology.com/2009/11/13/forum-php-2009-quelques-tweets/#comments</comments>
		<pubDate>Fri, 13 Nov 2009 21:20:30 +0000</pubDate>
		<dc:creator>Adrien Mogenet</dc:creator>
				<category><![CDATA[Humour]]></category>
		<category><![CDATA[Php]]></category>
		<category><![CDATA[évènement]]></category>

		<guid isPermaLink="false">http://www.ze-technology.com/?p=439</guid>
		<description><![CDATA[Vous l&#8217;avez peut être remarqué en regardant les photos, des écrans diffusaient en live les tweets envoyés avec le hashtag #afup. Tout le long de l&#8217;évènement, la bonne humeur s&#8217;enchaînait avec humour sur la plateforme de micro-blogging. Je vous offre ici un best-of de ce qui s&#8217;est raconté, prenez donc 2 minutes !

&#171;&#160;That&#8217;s not what [...]]]></description>
			<content:encoded><![CDATA[<p>Vous l&#8217;avez peut être remarqué en regardant les photos, des écrans diffusaient en <em>live </em>les tweets envoyés avec le hashtag <a href="http://twitter.com/#search?q=%23afup">#afup</a>. Tout le long de l&#8217;évènement, la bonne humeur s&#8217;enchaînait avec humour sur la plateforme de micro-blogging. Je vous offre ici un best-of de ce qui s&#8217;est raconté, prenez donc <strong>2 minutes</strong> !</p>
<ul>
<li>&laquo;&nbsp;That&#8217;s not what you wanted to hear, but that&#8217;s what I wanted to say!&nbsp;&raquo; (Monty, en parlant du business model pour MariaDB)</li>
<li>&laquo;&nbsp;Il faudrait un ring dans la salle : monty vs (sun + Oracle)&nbsp;&raquo; (Monty est fondateur de MySQL AB, qu&#8217;il a quitté suite au récent rachat)</li>
<li>&laquo;&nbsp;mysql -&gt; mariadb, ? il faut juste apprendre à claquer des doigts&nbsp;&raquo;</li>
<li>&laquo;&nbsp;Pour info, erreur 404 sur m6web.fr&nbsp;&raquo; (pendant la conf d&#8217;M6web)</li>
<li>&laquo;&nbsp;PHP 4 pour les sites jetables codé par des stagiaires // Pas faux!&nbsp;&raquo;</li>
<li>&laquo;&nbsp;Le singleton nuit gravement à la santé de votre code&nbsp;&raquo; (Fabien Potencier, pendant la conférence sur PHP 5.3)</li>
<li>&laquo;&nbsp;Le ZendFramework a plein de Singletons // BIM! (bon ok je troll, pardon)&nbsp;&raquo; (Fabien Potencier)</li>
<li>&laquo;&nbsp;Encouragez les employés à aller boire&nbsp;&raquo; (conférence Motiver ses développeurs)</li>
<li>&laquo;&nbsp;L&#8217;absence de système de contrôle de révisions peut faire partir un développeur&nbsp;&raquo; (la même conférence)</li>
<li>&laquo;&nbsp;Shooter son patron au paintball ça fait du bien&nbsp;&raquo; (encore la même !)</li>
<li>&laquo;&nbsp;Motiver ses développeurs&nbsp;&raquo; : on vante l&#8217;importance des gadgets (Nerf, jeux vidéos&#8230;). Taser? <img src='http://www.ze-technology.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> &nbsp;&raquo;</li>
<li>&laquo;&nbsp;Pinba ? c&#8217;est pas le pote de Timon dans le Roi Lion&#8230;. Désolé je sors !&nbsp;&raquo;</li>
<li>&laquo;&nbsp;« Apache n&#8217;est pas un indien hein, on ne va pas parler de celui-là »</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.ze-technology.com/2009/11/13/forum-php-2009-quelques-tweets/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Forum PHP 2009 : Quelques photos</title>
		<link>http://www.ze-technology.com/2009/11/13/forum-php-2009-quelques-photos/</link>
		<comments>http://www.ze-technology.com/2009/11/13/forum-php-2009-quelques-photos/#comments</comments>
		<pubDate>Fri, 13 Nov 2009 20:04:46 +0000</pubDate>
		<dc:creator>Adrien Mogenet</dc:creator>
				<category><![CDATA[Photo]]></category>
		<category><![CDATA[Php]]></category>
		<category><![CDATA[évènement]]></category>

		<guid isPermaLink="false">http://www.ze-technology.com/?p=424</guid>
		<description><![CDATA[Avant même quelques impressions (et bien + encore) voici un &#8211; petit &#8211; reportage photo de cette édition 2009 du forum PHP, ces 12 et 13 novembre à la Cité des Sciences (Paris).
Avis, réactions, rapports et compagnie à venir dans de prochains billets !
]]></description>
			<content:encoded><![CDATA[<p>Avant même quelques impressions (et bien + encore) voici un &#8211; petit &#8211; reportage photo de cette édition 2009 du forum PHP, ces 12 et 13 novembre à la Cité des Sciences (Paris).</p>
<div id="attachment_425" class="wp-caption aligncenter" style="width: 510px"><img class="size-full wp-image-425" title="Hall" src="http://www.ze-technology.com/wp-content/uploads/2009/11/hall.jpg" alt="Le hall" width="500" height="335" /><p class="wp-caption-text"> Le hall</p></div>
<div id="attachment_426" class="wp-caption aligncenter" style="width: 510px"><img class="size-full wp-image-426" title="Conférence MariaDB" src="http://www.ze-technology.com/wp-content/uploads/2009/11/conf-mariadb.jpg" alt="Conférence MariaDB par Michael Widenius" width="500" height="335" /><p class="wp-caption-text">Conférence MariaDB par Michael Widenius</p></div>
<div id="attachment_427" class="wp-caption aligncenter" style="width: 510px"><img class="size-full wp-image-427" title="conf-mariadb-vodka" src="http://www.ze-technology.com/wp-content/uploads/2009/11/conf-mariadb-vodka.jpg" alt="La scéance Black Vodka / Questions après la conférence sur MariaDB" width="500" height="335" /><p class="wp-caption-text">La séance Black Vodka / Questions après la conférence sur MariaDB</p></div>
<div id="attachment_428" class="wp-caption aligncenter" style="width: 510px"><img class="size-full wp-image-428" title="ecran-twitter" src="http://www.ze-technology.com/wp-content/uploads/2009/11/ecran-twitter.jpg" alt="La diffusion Twitter de #afup en live dans le hall" width="500" height="335" /><p class="wp-caption-text">La diffusion Twitter de #afup en live dans le hall</p></div>
<div id="attachment_429" class="wp-caption aligncenter" style="width: 510px"><img class="size-full wp-image-429" title="eeepc" src="http://www.ze-technology.com/wp-content/uploads/2009/11/eeepc.jpg" alt="Le concours eeePC organisé" width="500" height="335" /><p class="wp-caption-text">Le concours eeePC organisé</p></div>
<div id="attachment_430" class="wp-caption aligncenter" style="width: 510px"><img class="size-full wp-image-430" title="salle-projets" src="http://www.ze-technology.com/wp-content/uploads/2009/11/salle-projets.jpg" alt="La salle des projets PHP" width="500" height="335" /><p class="wp-caption-text">La salle des projets PHP</p></div>
<div id="attachment_431" class="wp-caption aligncenter" style="width: 510px"><img class="size-full wp-image-431" title="fabpot" src="http://www.ze-technology.com/wp-content/uploads/2009/11/fabpot.jpg" alt="Conférence PHP5.3 par Fabien Potencier" width="500" height="335" /><p class="wp-caption-text">Conférence PHP5.3 par Fabien Potencier</p></div>
<div id="attachment_432" class="wp-caption aligncenter" style="width: 510px"><img class="size-full wp-image-432" title="symfony" src="http://www.ze-technology.com/wp-content/uploads/2009/11/symfony.jpg" alt="Le stand symfony" width="500" height="335" /><p class="wp-caption-text">Le stand Sensio Labs</p></div>
<div id="attachment_433" class="wp-caption aligncenter" style="width: 510px"><img class="size-full wp-image-433" title="vue-du-sol" src="http://www.ze-technology.com/wp-content/uploads/2009/11/vue-du-sol.jpg" alt="L'amphi vu du sol" width="500" height="335" /><p class="wp-caption-text">L&#39;amphi vu du sol</p></div>
<p>Avis, réactions, rapports et compagnie à venir dans de prochains billets !</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ze-technology.com/2009/11/13/forum-php-2009-quelques-photos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Piwam au forum PHP 2009 : ZeTechnology vous offre 40 euros de réductions</title>
		<link>http://www.ze-technology.com/2009/10/25/piwam-au-forum-php-2009-zetechnology-vous-offre-40-euros-de-reductions/</link>
		<comments>http://www.ze-technology.com/2009/10/25/piwam-au-forum-php-2009-zetechnology-vous-offre-40-euros-de-reductions/#comments</comments>
		<pubDate>Sun, 25 Oct 2009 21:23:16 +0000</pubDate>
		<dc:creator>Adrien Mogenet</dc:creator>
				<category><![CDATA[Libre]]></category>
		<category><![CDATA[Php]]></category>
		<category><![CDATA[évènement]]></category>

		<guid isPermaLink="false">http://www.ze-technology.com/?p=400</guid>
		<description><![CDATA[C&#8217;est officiel, j&#8217;aurai l&#8217;honneur de présenter Piwam à l&#8217;édition 2009 du forum PHP, les 12 et 13 novembre à la Cité des Sciences (Paris). aux côtés entre autre de FineFS, Hoa et WampServer.
Si vous souhaitez assister aux conférences de ce forum professionnel, vous pouvez bénéficier d&#8217;un tarif préférentiel (140 euros les 2 journées, au lieu [...]]]></description>
			<content:encoded><![CDATA[<p>C&#8217;est officiel, j&#8217;aurai l&#8217;honneur de présenter <a href="http://piwam.googlecode.com/"><a href="http://www.piwam.org">Piwam</a></a> à l&#8217;édition 2009 du <a href="http://afup.org/pages/forumphp2009/">forum PHP</a>, les 12 et 13 novembre à la Cité des Sciences (Paris). aux côtés entre autre de FineFS, Hoa et WampServer.</p>
<p>Si vous souhaitez assister aux conférences de ce forum professionnel, vous pouvez bénéficier d&#8217;un tarif préférentiel (140 euros les 2 journées, au lieu de 180) en inscrivant le code &laquo;&nbsp;<a href="http://www.piwam.org">Piwam</a>&laquo;&nbsp;.</p>
<ul>
<li><a href="http://afup.org/pages/forumphp2009/">Le forum PHP 2009</a></li>
<li><a href="http://afup.org/pages/forumphp2009/inscription.php">Formulaire d&#8217;inscription</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.ze-technology.com/2009/10/25/piwam-au-forum-php-2009-zetechnology-vous-offre-40-euros-de-reductions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
