<?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>Stickblog &#187; PHP</title>
	<atom:link href="http://the-stickman.com/category/web-development/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://the-stickman.com</link>
	<description>Random developer notes</description>
	<lastBuildDate>Wed, 10 Mar 2010 15:11:27 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Note to self: PHP object constructors never return false</title>
		<link>http://the-stickman.com/web-development/php/note-to-self-php-object-constructors-never-return-false/</link>
		<comments>http://the-stickman.com/web-development/php/note-to-self-php-object-constructors-never-return-false/#comments</comments>
		<pubDate>Fri, 13 Jun 2008 12:55:59 +0000</pubDate>
		<dc:creator>Stickman</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://the-stickman.com/uncategorized/note-to-self-php-object-constructors-never-return-false/</guid>
		<description><![CDATA[As part of my ongoing refactoring work (see previous post) and having decided to take a more active stand against broken windows syndrome I&#8217;ve been cleaning up various coding oddities as I&#8217;ve found them.
Today I came across (something like) this little snippet:

if( ! $obj = new myObject( $id ) )
{
  throw new Exception( 'Not [...]]]></description>
			<content:encoded><![CDATA[<p>As part of my ongoing refactoring work (see <a href="http://the-stickman.com/web-development/firefox-extensions/screenshot-web-sites-easily-with-fireshot/">previous post</a>) and having decided to take a more active stand against <a href="http://en.wikipedia.org/wiki/Fixing_Broken_Windows#In_software_development">broken windows syndrome</a> I&#8217;ve been cleaning up various coding oddities as I&#8217;ve found them.</p>
<p>Today I came across (something like) this little snippet:</p>
<pre>
<code>if( ! $obj = new myObject( $id ) )
{
  throw new Exception( 'Not a valid object' );
}</code>
</pre>
<p>At first glance we might assume that the constructor attempts to populate the new object with some data loaded from (say) a database, but if no data matching the supplied ID is available, then the constructor returns <em>false</em> to indicate this. All very reasonable, right?</p>
<p>Except that it&#8217;s not possible to return <em>false</em>, or indeed any value, from a constructor because the &#8216;return value&#8217; of the constructor is the object itself. Which means that the above snippet is redundant, because the expression will always evaluate to <em>true</em>.</p>
<p>It would&#8217;ve made more sense to throw an exception within the method that loads the data &#8212; and in fact this is exactly what happens, which makes the quoted code doubly redundant and even more inexplicable.</p>
<p>I don&#8217;t <em>think</em> I&#8217;m the one who&#8217;s responsible for this particular brain fart but it&#8217;s OK because the only other likely candidate left the company last year so I happily can blame it on him&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://the-stickman.com/web-development/php/note-to-self-php-object-constructors-never-return-false/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>PHP, empty arrays and conditionals</title>
		<link>http://the-stickman.com/web-development/php/php-empty-arrays-and-conditionals/</link>
		<comments>http://the-stickman.com/web-development/php/php-empty-arrays-and-conditionals/#comments</comments>
		<pubDate>Thu, 24 Apr 2008 08:39:08 +0000</pubDate>
		<dc:creator>Stickman</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://the-stickman.com/web-development/php/php-empty-arrays-and-conditionals/</guid>
		<description><![CDATA[This is one of those silly little PHP quirks that catches me out from time to time, but apparently not often enough to avoid doing it again on occasion.
Let&#8217;s say you have a function (we&#8217;ll call it getSomeData())that returns an array, or false if there is a problem (yes you should probably be using exceptions, [...]]]></description>
			<content:encoded><![CDATA[<p>This is one of those silly little PHP quirks that catches me out from time to time, but apparently not often enough to avoid doing it again on occasion.</p>
<p>Let&#8217;s say you have a function (we&#8217;ll call it <i>getSomeData()</i>)that returns an array, or false if there is a problem (yes you should probably be using exceptions, but let&#8217;s just say for argument&#8217;s sake that this is a third-party library over which you have no control). So you use a conditional to test whether the function had a problem or not:</p>
<pre><code>// Try to get data
$data = getSomeData();
if( $data ){
  //...do something
} else {
  // There was a problem
  error_log( "There was a problem getting data!" );
  exit;
}</code></pre>
<p>For the uninitiated the if() here calls the function and assigns its return value to $data. If the return value is any non-false value, the condition evaluates to true.</p>
<p>The quirk, if you want to call it that, is PHP&#8217;s understanding of what constitutes a &#8216;non-false&#8217; value. You probably already know that null, 0 (zero) and &#8221; (empty string) all evaluate to false. But the one  that still catches me out now and then is that an empty array will evaluate to false, too. So in our above example, we&#8217;ll get an error if the getSomeData() function returns successfully, but with no data.</p>
<p>You could fix this with strict evaluation:</p>
<pre><code>// Try to get data
$data = getSomeData()
if( $data === false ){
   //...do something
} else {
   // There was a problem
   error_log( "There was a problem getting data!" );
   exit;
}</code></pre>
<p>&#8230;or alternatively (and better, in my opinion) check the return value&#8217;s type:</p>
<pre><code>// Try to get data
$data = getSomeData();
if( is_array( $data ) ){
   //...do something
} else {
   // There was a problem
   error_log( "There was a problem getting data!" );
   exit;
}</code></pre>
<p>If you want to know more, check out <a href="http://11heavens.com/true-or-false-in-php">this blog post</a> that goes into more detail &#8212; and points out a couple more unexpected &#8216;false&#8217; values (the string &#8216;0&#8242; and an object with no properties) that I wasn&#8217;t aware of.</p>
]]></content:encoded>
			<wfw:commentRss>http://the-stickman.com/web-development/php/php-empty-arrays-and-conditionals/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Very simple PHP &#8216;gallery&#8217; script</title>
		<link>http://the-stickman.com/web-development/php/very-simple-php-gallery-script/</link>
		<comments>http://the-stickman.com/web-development/php/very-simple-php-gallery-script/#comments</comments>
		<pubDate>Thu, 01 Nov 2007 09:29:47 +0000</pubDate>
		<dc:creator>Stickman</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://the-stickman.com/web-development/php/very-simple-php-gallery-script/</guid>
		<description><![CDATA[Somebody asked for a very simple script that would scan a directory (and its subdirectories) for all images, and then present them all as a list of thumbnails. So I had a quick go and came up with this (zip file). Just place the two PHP files in the directory you want to scan, open [...]]]></description>
			<content:encoded><![CDATA[<p>Somebody asked for a very simple script that would scan a directory (and its subdirectories) for all images, and then present them all as a list of thumbnails. So I had a quick go and came up with <a href="http://the-stickman.com/files/image_show.zip">this</a> (zip file). Just place the two PHP files in the directory you want to scan, open that URL in your browser and presto! a great big list of all your images.</p>
<p>Yes it&#8217;s very basic, but that was the point. No, you can&#8217;t add captions, or change the order, or have a whizzy rotating slideshow with cute sound effects.</p>
<p>However you can alter the output size of the thumbnails (using the $max_width and $max_height values) and the number of thumbnails in each row of the list table (using the $images_per_row value). The markup is very simple too so you should be able to alter the layout quite easily if you feel the need.</p>
<p>What&#8217;s it good for? Well if you just want to dump images into a folder and see them in a list, then it&#8217;s ideal.</p>
]]></content:encoded>
			<wfw:commentRss>http://the-stickman.com/web-development/php/very-simple-php-gallery-script/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Formatting text for email in PHP</title>
		<link>http://the-stickman.com/web-development/php/formatting-text-for-email-in-php/</link>
		<comments>http://the-stickman.com/web-development/php/formatting-text-for-email-in-php/#comments</comments>
		<pubDate>Thu, 04 Jan 2007 11:37:36 +0000</pubDate>
		<dc:creator>Stickman</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://the-stickman.com/web-development/php/formatting-text-for-email-in-php/</guid>
		<description><![CDATA[When you&#8217;re using a script to send an email (for example, from a contact form) it&#8217;s a good idea to break up long lines, because some email software won&#8217;t word wrap automatically &#8212; so continuous text is rendered on a single line that disappears off the edge of the screen.
I&#8217;ve had to do this several [...]]]></description>
			<content:encoded><![CDATA[<p>When you&#8217;re using a script to send an email (for example, from a contact form) it&#8217;s a good idea to break up long lines, because some email software won&#8217;t word wrap automatically &#8212; so continuous text is rendered on a single line that disappears off the edge of the screen.</p>
<p>I&#8217;ve had to do this several times in the past, but each time I forget how I did it and end up searching through the PHP string functions list. So this is a note to myself: use <a href="http://uk.php.net/manual/en/function.wordwrap.php">wordwrap()</a>. </p>
<p>As you&#8217;ll probably have guessed, this function breaks text into chunks of a specific length without splitting individual words. The standard length for lines in an email appears to be 75 characters (the default for this function). For safety, I replace the default line ending of \n with \r\n &#8212; I haven&#8217;t researched this but I wouldn&#8217;t be surprised if some windows clients get confused otherwise.</p>
]]></content:encoded>
			<wfw:commentRss>http://the-stickman.com/web-development/php/formatting-text-for-email-in-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Upload progress tracking in PHP5.2</title>
		<link>http://the-stickman.com/web-development/php/upload-progress-tracking-in-php52/</link>
		<comments>http://the-stickman.com/web-development/php/upload-progress-tracking-in-php52/#comments</comments>
		<pubDate>Tue, 28 Nov 2006 13:29:07 +0000</pubDate>
		<dc:creator>Stickman</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://the-stickman.com/web-development/php/upload-progress-tracking-in-php52/</guid>
		<description><![CDATA[A couple of weeks ago I mentioned that PHP 5.2 would have support for tracking the progress of file uploads. However, when I went looking for signs of this new functionality I came away empty-handed and rather confused. It&#8217;s definitely there in the release notes, but I just couldn&#8217;t find any reference to it anywhere [...]]]></description>
			<content:encoded><![CDATA[<p>A couple of weeks ago I <a href="http://the-stickman.com/web-development/php/and-the-php-soap-opera-rumbles-on/">mentioned</a> that PHP 5.2 would have support for tracking the progress of file uploads. However, when I went looking for signs of this new functionality I came away empty-handed and rather confused. It&#8217;s definitely there in the <a href="http://www.php.net/releases/5_2_0.php">release notes</a>, but I just couldn&#8217;t find any reference to it anywhere else.</p>
<p>So <a href="http://news.php.net/php.internals/26705">I posted a question to the PHP Internals mailing list</a>, asking &#8220;where are the promised hooks for PHP upload progress monitoring?&#8221; and within a few hours I had a nice clear reply from none other than <a href="http://lerdorf.com/bio.php">Rasmus Lerdorf</a> himself:</p>
<blockquote><p>They are C-level hooks.&nbsp; The various storage mechanisms need to add support for them in order to expose them to userspace PHP.&nbsp; I added support in pecl/apc, for example.</p>
<p>See:</p>
<p>&nbsp;<a href="http://progphp.com/progress.php">http://progphp.com/progress.php</a><br />&nbsp;(pick some random file in the 200k size range)</p>
<p>Source at:&nbsp; <a href="http://progphp.com/progress.phps">http://progphp.com/progress.phps</a></p>
<p>Eventually we will see more extensions that manage server-side storage with support for the hooks.</p></blockquote>
<p>&#8230;meaning that while in theory the functionality is there, it&#8217;s not exposed to &#8216;normal&#8217; people &#8212; yet. There&#8217;s a proprietary but promising extension <a href="http://blog.bitflux.ch/archive/2006/09/28/upload-progress-meter-extension-for-php-5-2.html">here</a>, which might eventually make it into the PHP core (maybe). Until then (or until another similar patch gains acceptance) we&#8217;ll have to wait.</p>
<p>Oh and as a side-note, someone also posted a link to <a href="http://trickie.org/code/phplibclamav.php">this extension</a> that uses the upload hooks to allow you to scan files for viruses, during upload. Nice.</p>
]]></content:encoded>
			<wfw:commentRss>http://the-stickman.com/web-development/php/upload-progress-tracking-in-php52/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>PHP 5.2.0 released</title>
		<link>http://the-stickman.com/web-development/php/php-520-released/</link>
		<comments>http://the-stickman.com/web-development/php/php-520-released/#comments</comments>
		<pubDate>Fri, 03 Nov 2006 12:28:19 +0000</pubDate>
		<dc:creator>Stickman</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://the-stickman.com/web-development/php/php-520-released/</guid>
		<description><![CDATA[Well it&#8217;s out (download here). Interesting additions include new Filter, JSON and ZIP extensions, and the previously-mentioned upload progress handling functions (although I can&#8217;t seem to find any documentation the the latter). There&#8217;s a new error mode &#8212; E_RECOVERABLE_ERROR &#8212; which allows user-defined error reporting to catch only those errors from which the system can [...]]]></description>
			<content:encoded><![CDATA[<p>Well <a href="http://www.php.net/releases/5_2_0.php">it&#8217;s out</a> (download <a href="http://www.php.net/downloads.php">here</a>). Interesting additions include new <a href="http://uk2.php.net/manual/en/ref.filter.php">Filter</a>, <a href="http://uk2.php.net/manual/en/ref.json.php">JSON</a> and <a href="http://uk2.php.net/manual/en/ref.zip.php">ZIP</a> extensions, and the <a href="http://the-stickman.com/web-development/php/and-the-php-soap-opera-rumbles-on/">previously-mentioned</a> upload progress handling functions (although I can&#8217;t seem to find any documentation the the latter). There&#8217;s a new error mode &#8212; E_RECOVERABLE_ERROR &#8212; which allows user-defined error reporting to catch only those errors from which the system can safely recover (ie. non-fatal). </p>
<p>Those considering upgrading should definitely read the <a href="http://www.php.net/UPDATE_5_2.txt">upgrading guide</a> before going ahead.</p>
]]></content:encoded>
			<wfw:commentRss>http://the-stickman.com/web-development/php/php-520-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>And the PHP soap opera rumbles on&#8230;</title>
		<link>http://the-stickman.com/web-development/php/and-the-php-soap-opera-rumbles-on/</link>
		<comments>http://the-stickman.com/web-development/php/and-the-php-soap-opera-rumbles-on/#comments</comments>
		<pubDate>Wed, 25 Oct 2006 09:39:41 +0000</pubDate>
		<dc:creator>Stickman</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://the-stickman.com/web-development/php/and-the-php-soap-opera-rumbles-on/</guid>
		<description><![CDATA[If you&#8217;ve been paying attention to the PHP scene then you should be aware that the next significant revision &#8212; version 5.2 &#8212; is imminent. Or at least, it should be. Of course this is PHP so no new release can be made without at least a bit of drama.
It seems that this time around, [...]]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;ve been paying attention to the PHP scene then you should be aware that the next significant revision &#8212; version 5.2 &#8212; is imminent. Or at least, it <i>should</i> be. Of course this is PHP so no new release can be made without at least <a href="http://the-stickman.com/web-development/php/php-505-fatal-error-only-variables-can-be-passed-by-reference/">a</a> <a href="http://the-stickman.com/web-development/php/php-variable-reference-problems-further-insight/">bit</a> <a href="http://the-stickman.com/web-development/woohoo-php51-released/">of</a> <a href="http://the-stickman.com/web-development/php/woohoo-php511-released-you-can-get-excited-now/">drama</a>.</p>
<p>It seems that this time around, there are a few issues generating controversy on the <a href="http://news.php.net/php.internals/">php.internals</a> mailing list (please note: this is still under discussion so might change before release)&#8230;</p>
<p>First up, some tightening of the rules for object-oriented code means that methods declared as both static and abstract will now cause an E_STRICT error. It seems like a minor point to me &#8212; what would a static abstract method <i>do</i> anyway? &#8212; but some seem to feel it could cause widespread backwards-compatibility problems.</p>
<p>Second there&#8217;s a change in the behaviour of the <i>mktime()</i> function: calling it with no parameters will throw an E_STRICT error. It&#8217;s has been noted that calling <i>mktime()</i> with no parameters (or all zeroes) is equivalent (if slower) to calling <i>time()</i>, so one wonders why anyone would bother. </p>
<p>Finally, and more seriously from my point of view, is a reference to the filtering (against malicious code injection) of the entries in the $_SERVER array. The dispute itself is a fairly minor one &#8212; it seems that in PHP5.2, the array will be filtered automatically only for servers running Apache 1.x. Others will be enabled in later releases. The reason I find this alarming is that it raised an issue of which I wasn&#8217;t fully aware &#8212; namely, that certain fields in the $_SERVER array cannot necessarily be trusted. I guess I had heard about this before but the potential severity hadn&#8217;t really dawned on me. If this issue concerns you, here are <a href="http://shiflett.org/archive/211">some</a> <a href="http://blog.phpdoc.info/archives/13-XSS-Woes.html">blog</a> <a href="http://shiflett.org/archive/98">entries </a>that might shed some more light.</p>
<p><strike>On a final note, one feature of PHP5.2 that I&#8217;m sure many people will latch onto is the new <i>uploadprogress_get_info()</i> function, which (as the name suggests) allows you to track the progress of uploaded files. So with a bit of Ajax-y magic you could create a real-time upload progress meter, which is great for large files. We currently use some homebrew C code to achieve the same thing, but it&#8217;ll be nice to be able to ditch that and use native PHP calls instead. You&#8217;ll find a little bit of info on the new functionality <a href="http://blog.bitflux.ch/archive/2006/09/28/upload-progress-meter-extension-for-php-5-2.html">here</a>.</strike> For more accurate info on this subject, check out <a href="http://the-stickman.com/web-development/php/upload-progress-tracking-in-php52/">this post</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://the-stickman.com/web-development/php/and-the-php-soap-opera-rumbles-on/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>XSLT, parameters, for-each and variables</title>
		<link>http://the-stickman.com/web-development/xslt-parameters-for-each-and-variables/</link>
		<comments>http://the-stickman.com/web-development/xslt-parameters-for-each-and-variables/#comments</comments>
		<pubDate>Fri, 20 Oct 2006 11:47:40 +0000</pubDate>
		<dc:creator>Stickman</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://the-stickman.com/web-development/xslt-parameters-for-each-and-variables/</guid>
		<description><![CDATA[Here&#8217;s another one of those really obscure things that will probably not be important to anyone at all, ever. Anyway, it took me a while to work it out so I&#8217;m going to record it here for future reference.
The problem: using XSLT, I wanted to pass a node-tree as a parameter to a template and [...]]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s another one of those really obscure things that will probably not be important to anyone at all, ever. Anyway, it took me a while to work it out so I&#8217;m going to record it here for future reference.</p>
<p>The problem: using XSLT, I wanted to pass a node-tree as a parameter to a template and then loop over it using xsl:for-each. Now I can already sense XSLT purists&#8217; hackles rising: yes I should probably have tried harder to come up with some way of achieving the same thing using template matching. But please take pity on my poor brain! It really hasn&#8217;t managed to absorb all the subtleties of XSLT yet (even after two years battling with it) and as hard as I tried, I just couldn&#8217;t achieve what I needed to in a pure functional way. I know, I know: I&#8217;m going to hell.</p>
<p>Anyway, first off I worked out that to pass a node-tree as a parameter you have to use xsl:copy-of rather than xsl:value-of (which just flattens the node-tree into a string). But then, just as I was celebrating getting over that particular hurdle, I found that trying to use a variable in a for-each statement like this (simplified for readability):</p>
<pre><code>&lt;xsl:template&gt;
	&lt;xsl:with-param name="data"/&gt;
	&lt;xsl:for-each select="$data/*"&gt;
		<!-- Do something -->
	&lt;/xsl:for-each&gt;
&lt;/xsl:template&gt;</code></pre>
<p>&#8230;gave an &#8216;Invalid Type&#8217; error.</p>
<p>The key (at least as far as <a href="http://xmlsoft.org/XSLT/">libxslt</a>, the XSLT parser library used by PHP5, is concerned), is something called <a href="http://www.exslt.org/">EXSLT</a>. As the acronym suggests, EXSLT provides extensions to XSLT. One of these is a function called <a href="http://www.exslt.org/exsl/functions/node-set/index.html"><em>node-set()</em></a>, which &#8220;returns a node-set from a result tree fragment&#8221;. Bingo!</p>
<p>To get EXSLT to work, first you need to add it to your stylesheet declaration:</p>
<p><code>xmlns:exslt="http://exslt.org/common"</code></p>
<p>Then just call the function (remembering to include the <em>exslt:</em> namespace):</p>
<pre><code>&lt;xsl:template&gt;
	&lt;xsl:with-param name="data"/&gt;
	&lt;xsl:for-each select="exslt:node-set($data)/*"&gt;
		<!-- Do something -->
	&lt;/xsl:for-each&gt;
&lt;/xsl:template&gt;</code></pre>
<p>NB: if you&#8217;re using PHP5, you&#8217;ll need to ensure that EXSLT is enabled on your PHP installation. To do this, you can check the result of the <a href="http://php.net/manual/en/function.xsl-xsltprocessor-has-exslt-support.php">XSLTProcessor->hasExsltSupport()</a> method.</p>
]]></content:encoded>
			<wfw:commentRss>http://the-stickman.com/web-development/xslt-parameters-for-each-and-variables/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Enforcing coding standards, automatically</title>
		<link>http://the-stickman.com/web-development/php/enforcing-coding-standards-automatically/</link>
		<comments>http://the-stickman.com/web-development/php/enforcing-coding-standards-automatically/#comments</comments>
		<pubDate>Thu, 21 Sep 2006 12:13:20 +0000</pubDate>
		<dc:creator>Stickman</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://the-stickman.com/web-development/php/enforcing-coding-standards-automatically/</guid>
		<description><![CDATA[PHP_CodeSniffer is a nice tool that allows you to define a set of standards for your code, and then detect where those standards aren&#8217;t being adhered to. Great for multi-developer projects.
]]></description>
			<content:encoded><![CDATA[<p><a href="http://pear.php.net/package/PHP_CodeSniffer/">PHP_CodeSniffer</a> is a nice tool that allows you to define a set of standards for your code, and then detect where those standards aren&#8217;t being adhered to. Great for multi-developer projects.</p>
]]></content:encoded>
			<wfw:commentRss>http://the-stickman.com/web-development/php/enforcing-coding-standards-automatically/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Some PHP quirks</title>
		<link>http://the-stickman.com/web-development/php/some-php-quirks/</link>
		<comments>http://the-stickman.com/web-development/php/some-php-quirks/#comments</comments>
		<pubDate>Mon, 17 Jul 2006 07:39:12 +0000</pubDate>
		<dc:creator>Stickman</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://the-stickman.com/web-development/php/some-php-quirks/</guid>
		<description><![CDATA[Here&#8217;s an interesting little article, whose title is self-explanatory: 5 Things You Probably Didn&#8217;t Know About PHP.
]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s an interesting little article, whose title is self-explanatory: <a href="http://blog.case.edu/gps10/2006/07/15/5_things_you_probably_didnt_know_about_php">5 Things You Probably Didn&#8217;t Know About PHP</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://the-stickman.com/web-development/php/some-php-quirks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
