<?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 d&#039;Idriss Neumann &#187; Divers</title>
	<atom:link href="https://blog.developpez.com/ineumann/pcategory/divers/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.developpez.com/ineumann</link>
	<description>Articles sur Linux et sur le développement sous Linux</description>
	<lastBuildDate>Mon, 14 Jul 2014 08:38:25 +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>Les dangers du typage faible en PHP</title>
		<link>https://blog.developpez.com/ineumann/p12212/divers/les-dangers-du-typage-faible-en-php</link>
		<comments>https://blog.developpez.com/ineumann/p12212/divers/les-dangers-du-typage-faible-en-php#comments</comments>
		<pubDate>Mon, 02 Sep 2013 22:40:21 +0000</pubDate>
		<dc:creator><![CDATA[ok.Idriss]]></dc:creator>
				<category><![CDATA[Divers]]></category>

		<guid isPermaLink="false">http://blog.developpez.com/ineumann/?p=161</guid>
		<description><![CDATA[Il faut avouer que le langage PHP rend bien service et est un langage assez complet. Toutefois, le typage faible de ce langage peut parfois nous amener à écrire des erreurs surprenantes sans que l&#8217;on s&#8217;en rende compte. Dernière en date : [idriss@hp-dv6:~]$ cat script.php #!/usr/bin/php &#60;?php &#160; &#160; // Bien entendu on désactive les warnings pour la prod :D &#160; &#160; error_reporting&#40;&#34;E_ALL &#38; ~E_NOTICE&#34;&#41;; &#160; &#160; &#160; &#160; $var1 = 'TOTO'; &#160; &#160; $var2 [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Il faut avouer que le langage PHP rend bien service et est un langage assez complet. Toutefois, le typage faible de ce langage peut parfois nous amener à écrire des erreurs surprenantes sans que l&rsquo;on s&rsquo;en rende compte.</p>
<p>Dernière en date :</p>
<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">[idriss@hp-dv6:~]$ cat script.php<br />
#!/usr/bin/php<br />
<span style="color: #000000; font-weight: bold;">&lt;?php</span><br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;">// Bien entendu on désactive les warnings pour la prod :D</span><br />
&nbsp; &nbsp; <a href="http://www.php.net/error_reporting"><span style="color: #990000;">error_reporting</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;E_ALL &amp; ~E_NOTICE&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> &nbsp; &nbsp;<br />
<br />
&nbsp; &nbsp; <span style="color: #000088;">$var1</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'TOTO'</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #000088;">$var2</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'TATA'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;">// Quelqu'un a décidé d'écrire son test en utilisant strcmp, pourquoi pas...</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><a href="http://www.php.net/strcmp"><span style="color: #990000;">strcmp</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$var1</span><span style="color: #339933;">,</span> <span style="color: #000088;">$var2</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span> <span style="color: #666666; font-style: italic;">// tient s'est trompé et compare $var1 à $var2 au lieu de $var2[0], ça arrive...</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;OK<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;KO<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<span style="color: #000000; font-weight: bold;">?&gt;</span><br />
[idriss@hp-dv6:~]$ chmod +x script.php <br />
[idriss@hp-dv6:~]$ ./script.php <br />
OK<br />
[idriss@hp-dv6:~]$</div></div>
<p>Ici <strong>strcmp</strong>, au lieu de lever une exception ou une erreur renvoie un simple warning (que l&rsquo;on ne voit pas forcément en fonction de la conf PHP) et accepte la comparaison en renvoyant <strong>null</strong>. </p>
<p><strong>null</strong> est ensuite implicitement casté en false, l&rsquo;opérande 0 également et on se retrouve avec une condition qui vaut <strong>true</strong>. Génial non <img src="https://blog.developpez.com/ineumann/wp-includes/images/smilies/icon_biggrin.gif" alt=":D" class="wp-smiley" /> ?</p>
<p>Alors oui, on peut effectivement faire des efforts de rigueur, tenir compte du warning par exemple. Il n&rsquo;empêche qu&rsquo;avec un langage compilé au typage fort, le codeur n&rsquo;aurait jamais eu à attendre de voir une exécution erronée pour se rendre compte du problème&#8230;</p>
<p><strong>Conclusion :</strong> faites attention aux casts implicites de vos if en PHP et à la fonction <strong>strcmp</strong> qui lorsqu&rsquo;elle plante renvoie <strong>null</strong> alors que 0 signifie &laquo;&nbsp;chaînes égales&nbsp;&raquo;. Utilisez toujours les opérateurs <strong>===</strong>, <strong>!==</strong>&#8230; dans le cadre de l&rsquo;utilisation de cette fonction !</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
