<?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>Blog de Skrol29 &#187; PHP</title>
	<atom:link href="https://blog.developpez.com/skrol29/pcategory/php/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.developpez.com/skrol29</link>
	<description></description>
	<lastBuildDate>Mon, 17 Aug 2009 14:26:12 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.1.42</generator>
	<item>
		<title>PHP, t&#8217;es moche mais je t&#8217;aime</title>
		<link>https://blog.developpez.com/skrol29/p5767/php/php_t_es_moche_mais_je_t_aime</link>
		<comments>https://blog.developpez.com/skrol29/p5767/php/php_t_es_moche_mais_je_t_aime#comments</comments>
		<pubDate>Tue, 27 May 2008 17:49:13 +0000</pubDate>
		<dc:creator><![CDATA[skrol29]]></dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Peu de gens me contrediront, PHP est un langage qui a beaucoup apporté au développement de solutions Web. Il est rapide, simple, modulaire. Il bénéficie d&#8217;une assez large de bibliothèque de complément, d&#8217;une grande communauté de développeur, il est très multi-plateforme, il est vraiment stable, il est fourni par défaut chez la très grande majorité des hébergeurs&#8230; et crème de la crème : il est gratuit. C&#8217;est tellement bien PHP qu&#8217;on se demande si on [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Peu de gens me contrediront, PHP est un langage qui a beaucoup apporté au développement de solutions Web. Il est rapide, simple, modulaire. Il bénéficie d&rsquo;une assez large de bibliothèque de complément, d&rsquo;une grande communauté de développeur, il est très multi-plateforme, il est vraiment stable, il est fourni par défaut chez la très grande majorité des hébergeurs&#8230; et crème de la crème : il est gratuit.</p>
<p>C&rsquo;est tellement bien PHP qu&rsquo;on se demande si on peu en dire du mal. Je me souviens pourtant de mes premières impressions quand je commençais à prendre en main ce langage il y a quelques années. Je me demandais pourquoi les développeurs plébiscitaient un outil qui avait manifestement très peu de rigueur dans le nommage des fonctions et dans leur syntaxe. Donc voilà, l&rsquo;idée m&rsquo;est venue de vous proposer un petit tour des incohérences de PHP.<br />
<span id="more-2"></span><br />
<strong>Le casse-tête des dates</strong></p>
<p>C&rsquo;est vrai que PHP 5.2 offre une classe native DateTime pour la gestion avancées des dates. Mais à part ça, travailler sur des dates est une vraie souffrance.</p>
<p>Sous certaines distributions Linux, et sous Windows, les timestamps négatifs ne sont pas gérés. PHP se basant sur les timestamps systèmes, il ne gèrera donc pas les dates avant le 1° janvier 1970 sur ces plateformes. Une galère totale pour les dates de naissance par exemple. La bibliothèque Pear vient à votre secours en proposant un module spéciale date, mais c&rsquo;est du lourd.</p>
<p>La fonction <a href="http://www.php.net/date">date()</a> permet de formater une date en texte, c&rsquo;est à dire de convertir un timestamp en affichage lisible pour l&rsquo;utilisateur ou en chaine univoque pour SQL. Étrangement, cette fonction qui offre un large panel de formatage ne permet pas l&rsquo;affichage des minutes et des secondes sans les zéro, alors qu&rsquo;elle le peu pour les mois et les jours. Pourquoi ?<br />
La syntaxe des formats locaux sont complètement différents du format date système. Par exemple date(&lsquo;i&rsquo;,$ts) affiche les minutes du timestamp $t, alors qu&rsquo;en formatage local il faut faire strftime(&lsquo;%M&rsquo;,$ts). Pourquoi ? Mais pourquoi ? Pour couronner les différences, certains formats de l&rsquo;un n&rsquo;existent pas chez l&rsquo;autre. Par exemple  <a href="http://www.php.net/strftime">strftime()</a> ne peut pas afficher le numéro du mois avec le zéro non significatif, alors que date() le réalise parfaitement. C&rsquo;est à s&rsquo;arracher les cheveux !</p>
<p>La fonction <a href="http://www.php.net/strtotime">strtotime()</a> est primordiale puisqu&rsquo;elle convertie une chaine en timestamp. Elle sert pour travailler sur une date saisie par l&rsquo;utilisateur ou d&rsquo;une base MySQL. Mais pas de bol, elle tient compte du changement d&rsquo;heure d&rsquo;été. Ca devient un vrai drame pour faire un bête calcule de durée entre deux dates.<br />
La fonction <a href="http://www.php.net/date_default_timezone_set">date_default_timezone_set()</a> introduite en PHP 5.1.0 permet de contourner ce problème.</p>
<p><strong>Des arguments dans n&rsquo;importe quel sens</strong></p>
<p>La fonction <a href="http://www.php.net/mktime">mktime()</a><br />
Mais pourquoi avoir rangé les arguments dans l&rsquo;ordre Heure, Min, Sec, Mois, Jour, Année !! ?? Ca correspond bien au format américain Mois/Jour/Année. Mais les anglais, les français, et bien d&rsquo;autres pays n&rsquo;ont pas ce format. Et pourquoi avoir placé les Heures au début ? Ça n&rsquo;a rien de pratique. Le plus répandu, et le plus universel c&rsquo;est quand même Année,Mois,Jour, puis en optionnel Heure,Min,Sec.</p>
<p>La fonction <a href="http://www.php.net/str_replace">str_replace()</a><br />
Alors que toutes les fonctions de chaine placent la chaine traitée en premier argument (ce qui a une certaine logique), la petite fonction str_replace() ne fait pas comme les autres, et c&rsquo;est en dernière position que vous devez placer la chaine à traiter, après celle à rechercher et celle de remplacement.</p>
<p><strong>Des noms trompeurs :</strong><br />
Exemples :</p>
<ul>
<li><a href="http://www.php.net/reset">reset()</a> sert pour les tableaux. Le nommage des fonctions date s&rsquo;est amélioré, en effet les nouvelles fonctions sont toutes préfixée par &laquo;&nbsp;array_&nbsp;&raquo;.</li>
<li><a href="http://www.php.net/define">define()</a> crée une constante. Ça aurait pu définir n&rsquo;importe quoi, d&rsquo;ailleurs dans d&rsquo;autres langages ça sert plutôt à définir une variable.</li>
<li><a href="http://www.php.net/date">date()</a> retourne une chaine et pas une date.</li>
</ul>
<p><strong>Des noms pas très bien régulés :</strong><br />
Exemple : <a href="http://www.php.net/strpos">strpos()</a>, <a href="http://www.php.net/strlen">strlen()</a> mais <a href="http://www.php.net/str_replace">str_replace()</a></p>
<p><strong>Les alias de fonction, c&rsquo;est inutile :</strong><br />
Exemple :  <a href="http://www.php.net/die">die()</a> et <a href="http://www.php.net/exit">exit()</a><br />
PHP regorge d&rsquo;alias superflus.</p>
<p>Bon ok, c&rsquo;est facile de critiquer&#8230; de plus on peu voir que PHP 5 tente de redresser le tir. Le langage étant super pratique par ailleurs, on lui excuse bien facilement ses petits défauts.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
