<?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>The Tech Guy FR &#187; développement</title>
	<atom:link href="http://blog.juliencrouzet.fr/tag/developpement/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.juliencrouzet.fr</link>
	<description>Le blog de Julien CROUZET</description>
	<lastBuildDate>Thu, 01 Jul 2010 19:38:12 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Quelques liens sympas &#8230;</title>
		<link>http://blog.juliencrouzet.fr/582/quelques-liens-sympas-1/</link>
		<comments>http://blog.juliencrouzet.fr/582/quelques-liens-sympas-1/#comments</comments>
		<pubDate>Thu, 01 Jul 2010 19:38:12 +0000</pubDate>
		<dc:creator>c2c</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[développement]]></category>
		<category><![CDATA[liens]]></category>

		<guid isPermaLink="false">http://blog.juliencrouzet.fr/?p=582</guid>
		<description><![CDATA[
Warning: call_user_func_array() expects parameter 1 to be a valid callback, first array member is not a valid class name or object in /home/www/blog.juliencrouzet.fr/wp-includes/plugin.php on line 166

Call Stack:
    0.0001     623472   1. {main}() /home/www/blog.juliencrouzet.fr/index.php:0
    0.0002     629000   2. require('/home/www/blog.juliencrouzet.fr/wp-blog-header.php') /home/www/blog.juliencrouzet.fr/index.php:17
    0.2022   37814304   3. require_once('/home/www/blog.juliencrouzet.fr/wp-includes/template-loader.php') /home/www/blog.juliencrouzet.fr/wp-blog-header.php:16
    0.2031   37817224   4. do_feed() /home/www/blog.juliencrouzet.fr/wp-includes/template-loader.php:14
    0.2031   37817504   5. do_action() /home/www/blog.juliencrouzet.fr/wp-includes/functions.php:1721
    0.2031   37819528   6. call_user_func_array() /home/www/blog.juliencrouzet.fr/wp-includes/plugin.php:395
    0.2031   37819584   7. do_feed_rss2() /home/www/blog.juliencrouzet.fr/wp-includes/plugin.php:0
    0.2031   37819776   8. load_template() /home/www/blog.juliencrouzet.fr/wp-includes/functions.php:1753
    0.2033   37881928   9. require_once('/home/www/blog.juliencrouzet.fr/wp-includes/feed-rss2.php') /home/www/blog.juliencrouzet.fr/wp-includes/theme.php:1087
    0.2082   37912496  10. the_excerpt_rss() /home/www/blog.juliencrouzet.fr/wp-includes/feed-rss2.php:46
    0.2102   37916008  11. apply_filters() /home/www/blog.juliencrouzet.fr/wp-includes/feed.php:177
    0.2104   37918608  12. call_user_func_array() /home/www/blog.juliencrouzet.fr/wp-includes/plugin.php:166

]]></description>
			<content:encoded><![CDATA[<div id="attachment_583" class="wp-caption aligncenter" style="width: 221px"><a href="http://blog.juliencrouzet.fr/wp-content/uploads/2010/07/links.jpg" rel="lightbox[582]"><img class="size-full wp-image-583" title="links" src="http://blog.juliencrouzet.fr/wp-content/uploads/2010/07/links.jpg" alt="" width="211" height="138" /></a><p class="wp-caption-text">Du lien frais (ou pas)</p></div>
<p>Quelques liens sympas concernant le développement Web :</p>
<ul>
<li><a href="http://www.gscottolson.com/blackbirdjs/">Blackbird</a> &#8211; alert(), c&#8217;est dépassé, la console de Firebug, c&#8217;est bien ; mais il y a mieux ! Blackbird est une console <strong>très</strong> sympa de logging Javascript qui s&#8217;active / désactive avec clavier, se déplace, etc&#8230; ;</li>
<li><a href="http://demo.tutorialzine.com/2009/10/cool-login-system-php-jquery/demo.php">Une idée</a> sympa de système de login avec un panneau qui slide ;</li>
<li><a href="http://css3generator.com/">Un générateur</a> de règles CSS3 ;</li>
<li><a href="http://redmine.lighttpd.net/wiki/1/AbsoLUAtion">Une collection</a> de scripts LUA pour Lighttpd pour tout type de problèmes, de quoi rendre Lighty le rapide aussi complet que le gros apache bien lent <img src='http://blog.juliencrouzet.fr/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  ;</li>
<li><a href="http://digitalbush.com/projects/masked-input-plugin/#demo">Un plugin jQuery</a> pour faire des &lt;input&gt; avec des masques de format.</li>
</ul>
<p>Bonne lecture !</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.juliencrouzet.fr/582/quelques-liens-sympas-1/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>PHP5.3 : Quelles nouveautés ?</title>
		<link>http://blog.juliencrouzet.fr/421/php-5-3-what-s-new/</link>
		<comments>http://blog.juliencrouzet.fr/421/php-5-3-what-s-new/#comments</comments>
		<pubDate>Sat, 04 Jul 2009 23:51:13 +0000</pubDate>
		<dc:creator>c2c</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[développement]]></category>
		<category><![CDATA[geek]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://blog.juliencrouzet.fr/?p=421</guid>
		<description><![CDATA[
Warning: call_user_func_array() expects parameter 1 to be a valid callback, first array member is not a valid class name or object in /home/www/blog.juliencrouzet.fr/wp-includes/plugin.php on line 166

Call Stack:
    0.0001     623472   1. {main}() /home/www/blog.juliencrouzet.fr/index.php:0
    0.0002     629000   2. require('/home/www/blog.juliencrouzet.fr/wp-blog-header.php') /home/www/blog.juliencrouzet.fr/index.php:17
    0.2022   37814304   3. require_once('/home/www/blog.juliencrouzet.fr/wp-includes/template-loader.php') /home/www/blog.juliencrouzet.fr/wp-blog-header.php:16
    0.2031   37817224   4. do_feed() /home/www/blog.juliencrouzet.fr/wp-includes/template-loader.php:14
    0.2031   37817504   5. do_action() /home/www/blog.juliencrouzet.fr/wp-includes/functions.php:1721
    0.2031   37819528   6. call_user_func_array() /home/www/blog.juliencrouzet.fr/wp-includes/plugin.php:395
    0.2031   37819584   7. do_feed_rss2() /home/www/blog.juliencrouzet.fr/wp-includes/plugin.php:0
    0.2031   37819776   8. load_template() /home/www/blog.juliencrouzet.fr/wp-includes/functions.php:1753
    0.2033   37881928   9. require_once('/home/www/blog.juliencrouzet.fr/wp-includes/feed-rss2.php') /home/www/blog.juliencrouzet.fr/wp-includes/theme.php:1087
    0.2152   37919336  10. the_excerpt_rss() /home/www/blog.juliencrouzet.fr/wp-includes/feed-rss2.php:46
    0.2224   37921936  11. apply_filters() /home/www/blog.juliencrouzet.fr/wp-includes/feed.php:177
    0.2227   37924336  12. call_user_func_array() /home/www/blog.juliencrouzet.fr/wp-includes/plugin.php:166

]]></description>
			<content:encoded><![CDATA[<div id="attachment_422" class="wp-caption aligncenter" style="width: 209px"><a href="http://blog.juliencrouzet.fr/wp-content/uploads/2009/07/800px-PHP-n_logo.svg1_2.png" rel="lightbox[421]"><img class="size-medium wp-image-422" title="PHP5.3 est sorti le 30 Juin" src="http://blog.juliencrouzet.fr/wp-content/uploads/2009/07/800px-PHP-n_logo.svg1_2-300x157.png" alt="PHP5.3 est sorti le 30 Juin" width="199" height="104" /></a><p class="wp-caption-text">Les nouveautés de PHP5.3</p></div>
<p style="text-align: left;">Le 30 Juin dernier est sorti PHP5.3, discrètement&#8230; Pourtant c&#8217;est une évolution majeure, qui ne comprends pas que des corrections de bugs (140 corrections quand même).</p>
<p style="text-align: left;">Quoi de neuf alors dans cette version ?</p>
<p style="text-align: left;"><span id="more-421"></span></p>
<h2 style="text-align: left;">Les namespaces</h2>
<p>Annoncé comme l&#8217;une des évolutions majeures du légendaire PHP6 (sortie en 2087, peut être), les namespaces ou espaces de nommages sont l&#8217;une des dernières étapes de la route vers un vrai langage objet.</p>
<p>Alors qu&#8217;est ce que c&#8217;est &laquo;&nbsp;simplement&nbsp;&raquo; ? C&#8217;est un moyen de faire cohabiter ensemble plusieurs librairies de manière simple et d&#8217;organiser simplement son code.</p>
<p>Le but premier est de pouvoir nommer <strong>simplement </strong>des classes, constantes et fonctions sans risquer le conflit avec du code existant. Jusqu&#8217;ici, on utilisait des techniques, comme par exemple nommer ses classes en respectant des règles comme  <em>NomDuFramework_NomDeLaLibrairie_NomDeLaClasse</em>. Avec les namespaces, il est simple de compartimenter son code et ne pas se soucier des conflits.</p>
<p>Un exemple, qui j&#8217;espère, sera parlant :</p>
<pre name="code" class="php">

/**
 * On execute du code dans le deuxièmme espace
 */
namespace				Espace2 {
	echo "On est dans le deuxièmme espace :\n";
	var_dump(CONSTANTE);
	fonction();
	$objet = new Classe();
	$objet-&gt;test();
	echo "\n\n";
}
/**
 * On execute du code dans l'espace global
 */
namespace {
	echo "On est dans l'espace global :\n";
	echo "Est-ce que la constante CONSTANTE est définie ?\n";
	var_dump(defined('CONSTANTE'));
	echo "Est-ce que la fonction fonction() est définie ?\n";
	var_dump(function_exists('fonction'));
	echo "Est-ce que la classe 'Classe' est définie ?\n";
	var_dump(class_exists('Classe'));
}
?&gt;</pre>
<p>Avec cette évolution, on fait un pas de plus vers les lettres de noblesse de PHP dans le monde des langages objets, à plus d&#8217;un point.</p>
<p>Aujourd&#8217;hui, beaucoup de gens pensent leur code comme une accumulation de fonctions (souvent un copier-coller de <a href="http://phpfonctions.fr/">sites</a>). Utiliser des namespaces pousse le développeur à s&#8217;imposer une certaine rigueur et à bien séparer son code de manière logique.</p>
<p>J&#8217;attends avec impatience la 2.0 de <a href="http://framework.zend.com">Zend Framework</a> qui utilisera les namespaces <img src='http://blog.juliencrouzet.fr/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h2>Les fonctions anonymes</h2>
<p>Les fonctions anonymes (ou <em>closures</em>) sont des blocs de codes exécutables (donc des fonctions) mais qui ne possèdent pas de noms pour être rappelées plus tard. La première fois cela peut paraitre déroutant et on peut ne pas comprendre l&#8217;utilité, mais par exemple, si vous utilisez jQuery, vous saisissez immédiatement l&#8217;opportunité !</p>
<p>Prenons par exemple la fonction PHP <a href="http://fr2.php.net/manual/fr/function.array-walk.php">array_walk()</a> qui permet d&#8217;appliquer une fonction sur chaque élément d&#8217;un tableau. Avant on définissait une fonction, on la nommait et on passait le nom de la fonction en argument, comme ceci :</p>
<pre name="code" class="php">
function cmp($a, $b) {
    if ($a == $b) {
        return 0;
    }
    return ($a < $b) ? -1 : 1;
}
uasort($array, 'cmp');
</pre>
<p>Maintenant, on peut directement passer une fonction anonyme comme argument sans avoir à créer de fonction au préalable :</p>
<pre name="code" class="php">
uasort($array, function($a, $b) {
    if ($a == $b) {
        return 0;
    }
    return ($a < $b) ? -1 : 1;
});
</pre>
<h2>"late static binding"</h2>
<p>Le late static binding ou la "Résolution statique à la volée" est un concept assez théorique au premier abord mais qui solutionne une importante limitations de PHP.</p>
<p>Dans le cadre de méthodes statiques d'une classe, le mot clé <em>self </em>ou la constante <em>__CLASS__</em> qui font référence à la classe "courante" sont assignées par PHP lors de l'analyse du code et non au moment de l'exécution, donc en cas d'héritage, elles font référence à la classe parente et non à la classe courante.</p>
<p>Cela peut paraitre compliqué, alors prenons un exemple, le code suivant :</p>
<p>affichera "Je suis la classe Papa".</p>
<p>PHP5.3 étend donc le mot-clé <em>static</em>, pour l'utiliser comme une référence à la classe courante <strong>pendant l'exécution</strong> et non pendant la compilation. On peut donc écrire le code suivant :</p>
<pre name="code" class="php">
class		Papa {
	public static function	jeSuis() {
		return (__CLASS__);
	}

	public static function	annonceToi() {
		echo 'Je suis la classe ' . static::jeSuis() . "\n";
	}
}
class		Filston extends Papa {
	public static function	jeSuis() {
		return (__CLASS__);
	}
}

Filston::annonceToi();
</pre>
<p>qui affichera bien "Je suis la classe Filston".</p>
<h2>Le contrôle du garbage collector</h2>
<p>Pour ceux qui ne serait pas à l'aise, consultez l'article <a href="http://fr.wikipedia.org/wiki/Ramasse-miettes_%28informatique%29">Garbage Collector</a> sur Wikipedia.</p>
<p>N'ayant eu le temps de tester encore en détail, je vous conseille la lecture de ce <a href="http://blog.pascal-martin.fr/post/php-5.3-garbage-collector-vs-consommation-memoire">très bon billet</a>.</p>
<h2>L'opérateur ternaire simplifié</h2>
<pre name="code" class="php">
$valeur = ($valeur) ?: $default;
</pre>
<p>à la place de </p>
<pre name="code" class="php">
$valeur = ($valeur) ? $valeur : $default;
</pre>
<h2>Et puis aussi ...</h2>
<p>D'autres <a href="http://fr3.php.net/manual/en/migration53.php">petits changements</a> que je vous laisse consulter... <img src='http://blog.juliencrouzet.fr/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Bonne lecture et bon tests !</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.juliencrouzet.fr/421/php-5-3-what-s-new/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
