<?xml version="1.0" ?>
<rss version="2.0">
	<channel>
		<title>Keith's Weblog: Comments on &quot;PHP sucks yet again&quot;</title>
		<description>Keith's Weblog: Comments on &quot;PHP sucks yet again&quot;, posted on November 24, 2005</description>
		<link>http://keithdevens.com/weblog/archive/2005/Nov/24/PHP-sucks</link>

		<category>PHP</category>
		<category>Programming</category>
		<language>en-us</language>
		<image>
			<link>http://keithdevens.com/weblog</link>
			<title>Keith Devens .com</title>
			<url>http://keithdevens.com/images/kbd.gif</url>
		</image>

		<item>
			<title>by Dennis Pallett</title>
			<link>http://keithdevens.com/weblog/archive/2005/Nov/24/PHP-sucks#comment8732</link>
			<guid isPermaLink="false">http://keithdevens.com/weblog/7629#comment8732</guid>
			<pubDate>Thu, 24 Nov 2005 21:39:30 +0000</pubDate>
			<description>&lt;p class=&quot;st-markup&quot;&gt;I hear ya, it's a pain in the ass to get notices for every unset GET or POST variable, and it's exactly the reason why I usually turn off notices, even during developing (which I shouldn't do).&lt;/p&gt;

&lt;p class=&quot;st-markup&quot;&gt;I like your functions though, and I'll probably use them from now on.&lt;/p&gt;

</description>
		</item>
		<item>
			<title>by Dennis Pallett</title>
			<link>http://keithdevens.com/weblog/archive/2005/Nov/24/PHP-sucks#comment8733</link>
			<guid isPermaLink="false">http://keithdevens.com/weblog/7629#comment8733</guid>
			<pubDate>Thu, 24 Nov 2005 21:41:31 +0000</pubDate>
			<description>&lt;p class=&quot;st-markup&quot;&gt;Oh, and a real shame about named parameters. I love those, and usually use parameters now, i.e.&lt;/p&gt;

&lt;code&gt;&lt;span style=&quot;color: #000000&quot;&gt;
function&amp;#160;foo&amp;#160;($params)&amp;#160;{&lt;br /&gt;&lt;br /&gt;echo&amp;#160;$params['userid'];&lt;br /&gt;echo&amp;#160;$params['pass'];&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;
&lt;/code&gt;&lt;p class=&quot;st-markup&quot;&gt;instead of:&lt;/p&gt;

&lt;code&gt;&lt;span style=&quot;color: #000000&quot;&gt;
function&amp;#160;foo&amp;#160;($user,&amp;#160;$pass)&lt;br /&gt;&lt;/span&gt;
&lt;/code&gt;</description>
		</item>
		<item>
			<title>by Keith</title>
			<link>http://keithdevens.com/weblog/archive/2005/Nov/24/PHP-sucks#comment8734</link>
			<guid isPermaLink="false">http://keithdevens.com/weblog/7629#comment8734</guid>
			<pubDate>Fri, 25 Nov 2005 00:13:28 +0000</pubDate>
			<description>&lt;p class=&quot;st-markup&quot;&gt;Here's the whole &lt;kbd&gt;g&lt;/kbd&gt; function, for your entertainment (update, Dec 7: fixed bug in &lt;kbd&gt;g&lt;/kbd&gt;):&lt;/p&gt;

&lt;code&gt;&lt;span style=&quot;color: #000000&quot;&gt;
&lt;span style=&quot;color: #0000BB&quot;&gt;&amp;lt;?php&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;function&amp;#160;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$var&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;,&amp;#160;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$key&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;,&amp;#160;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$default&amp;#160;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&amp;#160;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;NULL&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;){&amp;#160;&lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;#make&amp;#160;it&amp;#160;easy&amp;#160;to&amp;#160;develop&amp;#160;with&amp;#160;notices&amp;#160;on&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;if(!&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;is_array&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$key&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;)){&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;return&amp;#160;isset(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$var&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$key&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;])&amp;#160;?&amp;#160;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$var&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$key&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;]&amp;#160;:&amp;#160;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$default&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}else{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$result&amp;#160;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&amp;#160;array();&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;if(isset(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$key&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;]))&amp;#160;&lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;#numeric&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;foreach(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$key&amp;#160;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;as&amp;#160;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$k&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;)&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$result&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;[]&amp;#160;=&amp;#160;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$var&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;,&amp;#160;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$k&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;else&amp;#160;&lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;#associative&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;foreach(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$key&amp;#160;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;as&amp;#160;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$k&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$v&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;)&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$result&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$v&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;]&amp;#160;=&amp;#160;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$var&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;,&amp;#160;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$k&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);&lt;br /&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;return&amp;#160;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$result&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;?&amp;gt;&lt;br /&gt;&lt;/span&gt;
&lt;/span&gt;
&lt;/code&gt;&lt;p class=&quot;st-markup&quot;&gt;So, if &lt;kbd&gt;$key&lt;/kbd&gt; is an array you get an array back composed only of the keys you specify in the array, where keys that don't exist get &lt;kbd&gt;NULL&lt;/kbd&gt;. And if you specify an &lt;em&gt;associative&lt;/em&gt; array you can transform the keys in an array from the keys in that array to the corresponding values.&lt;/p&gt;

&lt;p class=&quot;st-markup&quot;&gt;I also use this function everywhere:&lt;/p&gt;

&lt;code&gt;&lt;span style=&quot;color: #000000&quot;&gt;
&lt;span style=&quot;color: #0000BB&quot;&gt;&amp;lt;?php&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;function&amp;#160;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$str&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;){&amp;#160;echo&amp;#160;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;htmlspecialchars&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$str&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);&amp;#160;}&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;?&amp;gt;&lt;br /&gt;&lt;/span&gt;
&lt;/span&gt;
&lt;/code&gt;&lt;p class=&quot;st-markup&quot;&gt;It's way easier to type &lt;kbd&gt;e($foo)&lt;/kbd&gt; than &lt;kbd&gt;echo htmlspecialchars($foo)&lt;/kbd&gt; all over the place. I have a lot of these little functions I use everywhere on &lt;a href=&quot;/wiki/PHP&quot;&gt;my PHP page&lt;/a&gt;, if you're interested.&lt;/p&gt;

</description>
		</item>
		<item>
			<title>by Keith Gaughan</title>
			<link>http://keithdevens.com/weblog/archive/2005/Nov/24/PHP-sucks#comment8737</link>
			<guid isPermaLink="false">http://keithdevens.com/weblog/7629#comment8737</guid>
			<pubDate>Fri, 25 Nov 2005 14:33:01 +0000</pubDate>
			<description>&lt;p class=&quot;st-markup&quot;&gt;I'll show you something moronic. I've a function similar to your &lt;strong&gt;e()&lt;/strong&gt; function that I use called &lt;strong&gt;eecho()&lt;/strong&gt;. The following code doesn't work:&lt;/p&gt;

&lt;code&gt;&lt;span style=&quot;color: #000000&quot;&gt;
&lt;span style=&quot;color: #0000BB&quot;&gt;&amp;lt;?php&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;function&amp;#160;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;eecho&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;()&amp;#160;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;echo&amp;#160;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;htmlentities&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;implode&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;''&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;,&amp;#160;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;func_get_args&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;()));&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;?&amp;gt;&lt;br /&gt;&lt;/span&gt;
&lt;/span&gt;
&lt;/code&gt;&lt;p class=&quot;st-markup&quot;&gt;But this does:&lt;/p&gt;

&lt;code&gt;&lt;span style=&quot;color: #000000&quot;&gt;
&lt;span style=&quot;color: #0000BB&quot;&gt;&amp;lt;?php&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;function&amp;#160;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;eecho&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;()&amp;#160;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$args&amp;#160;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&amp;#160;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;func_get_args&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;();&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;echo&amp;#160;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;htmlentities&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;implode&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;''&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;,&amp;#160;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$args&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;));&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;?&amp;gt;&lt;br /&gt;&lt;/span&gt;
&lt;/span&gt;
&lt;/code&gt;&lt;p class=&quot;st-markup&quot;&gt;Now, &lt;em&gt;that&lt;/em&gt; is utterly stupid.&lt;/p&gt;

</description>
		</item>
		<item>
			<title>by Keith</title>
			<link>http://keithdevens.com/weblog/archive/2005/Nov/24/PHP-sucks#comment8740</link>
			<guid isPermaLink="false">http://keithdevens.com/weblog/7629#comment8740</guid>
			<pubDate>Fri, 25 Nov 2005 18:26:01 +0000</pubDate>
			<description>&lt;p class=&quot;st-markup&quot;&gt;&lt;em&gt;That's&lt;/em&gt; weird. I'll have to try that later and see why it doesn't work. Another thing is, PHP's parser is too lame to allow things like:&lt;/p&gt;

&lt;code&gt;&lt;span style=&quot;color: #000000&quot;&gt;
&lt;span style=&quot;color: #0000BB&quot;&gt;&amp;lt;?php&lt;br /&gt;$foo&amp;#160;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&amp;#160;&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;&quot;bar&amp;#160;baz&quot;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;&lt;br /&gt;echo&amp;#160;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;explode&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;'&amp;#160;'&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;,&amp;#160;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$foo&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;)[&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;];&amp;#160;&lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;#should&amp;#160;be&amp;#160;'bar',&amp;#160;but&amp;#160;gives&amp;#160;parse&amp;#160;error&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;?&amp;gt;&lt;br /&gt;&lt;/span&gt;
&lt;/span&gt;
&lt;/code&gt;</description>
		</item>
		<item>
			<title>by M. Bean</title>
			<link>http://keithdevens.com/weblog/archive/2005/Nov/24/PHP-sucks#comment8745</link>
			<guid isPermaLink="false">http://keithdevens.com/weblog/7629#comment8745</guid>
			<pubDate>Sat, 26 Nov 2005 11:48:01 +0000</pubDate>
			<description>&lt;p class=&quot;st-markup&quot;&gt;This post is why your blog software needs a &amp;lt;--more--&amp;gt; feature to paginate for you.&lt;/p&gt;

</description>
		</item>
		<item>
			<title>by Keith</title>
			<link>http://keithdevens.com/weblog/archive/2005/Nov/24/PHP-sucks#comment8751</link>
			<guid isPermaLink="false">http://keithdevens.com/weblog/7629#comment8751</guid>
			<pubDate>Sun, 27 Nov 2005 12:09:56 +0000</pubDate>
			<description>&lt;p class=&quot;st-markup&quot;&gt;You mean, because this post was too long for the whole thing to show comfortably on the home page? You're saying you'd like something like what &lt;a href=&quot;http://www.intertwingly.net/blog/&quot;&gt;Sam Ruby&lt;/a&gt; does?&lt;/p&gt;

</description>
		</item>
	</channel>
</rss>
