<?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"
	>

<channel>
	<title>Dougal Matthews</title>
	<atom:link href="http://blog.dougalmatthews.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.dougalmatthews.com</link>
	<description></description>
	<pubDate>Wed, 02 Jul 2008 22:30:49 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5</generator>
	<language>en</language>
			<item>
		<title>JavaScript: Detecting Caps lock</title>
		<link>http://blog.dougalmatthews.com/2008/07/javascript-detecting-caps-lock/</link>
		<comments>http://blog.dougalmatthews.com/2008/07/javascript-detecting-caps-lock/#comments</comments>
		<pubDate>Wed, 02 Jul 2008 22:30:49 +0000</pubDate>
		<dc:creator>Dougal</dc:creator>
		
		<category><![CDATA[JavaScript]]></category>

		<category><![CDATA[events]]></category>

		<category><![CDATA[keypress]]></category>

		<guid isPermaLink="false">http://blog.dougalmatthews.com/?p=20</guid>
		<description><![CDATA[I wanted to see if you could detect caps lock in JavaScript. Why? As a small usability touch, basically alerting users that caps lock is enabled when they are entering passwords for example. I’ve wrapped up the logic in a simple function that can help you detect caps lock on a key press. Here is [...]]]></description>
			<content:encoded><![CDATA[<p class="MsoNormal"><span lang="EN-GB">I wanted to see if you could detect caps lock in JavaScript. Why? As a small usability touch, basically alerting users that caps lock is enabled when they are entering passwords for example. I’ve wrapped up the logic in a simple function that can help you detect caps lock on a key press. Here is the <a title="Demo in the cloud" href="http://dougal.aptanacloud.com/capslock/filter.html" target="_blank">demo </a>and following is the function followed by a simple usage.</span></p>
<p class="MsoNormal">
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">function</span> isCapslock<span class="br0">&#40;</span>e<span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; e = <span class="br0">&#40;</span>e<span class="br0">&#41;</span> ? e : window.<span class="me1">event</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; </div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <span class="kw2">var</span> charCode = <span class="kw2">false</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>e.<span class="me1">which</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; charCode = e.<span class="me1">which</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span>e.<span class="me1">keyCode</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; charCode = e.<span class="me1">keyCode</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">var</span> shifton = <span class="kw2">false</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>e.<span class="me1">shiftKey</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; shifton = e.<span class="me1">shiftKey</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span>e.<span class="me1">modifiers</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; shifton = !!<span class="br0">&#40;</span>e.<span class="me1">modifiers</span> &amp; <span class="nu0">4</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>charCode &gt;= <span class="nu0">97</span> &amp;&amp; charCode &lt;= <span class="nu0">122</span> &amp;&amp; shifton<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw2">true</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>charCode &gt;= <span class="nu0">65</span> &amp;&amp; charCode &lt;= <span class="nu0">90</span> &amp;&amp; !shifton<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw2">true</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">return</span> <span class="kw2">false</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
</ol>
</div>
<p class="MsoNormal">
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &lt;input type=&quot;text&quot; name=&quot;testinput&quot; id=&quot;testinput&quot; value=&quot;&quot; /&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &lt;script type=&quot;text/javascript&quot;&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; document.getElementById(&#8217;testinput&#8217;).onkeypress = function(e){
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(isCapslock(e)){
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; alert(&quot;Caps on&quot;);
</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } else {
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; alert(&quot;Caps off&quot;);
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &lt;/script&gt;
</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
</ol>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.dougalmatthews.com/2008/07/javascript-detecting-caps-lock/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Aptana Cloud - Hands On</title>
		<link>http://blog.dougalmatthews.com/2008/06/aptana-cloud-hands-on/</link>
		<comments>http://blog.dougalmatthews.com/2008/06/aptana-cloud-hands-on/#comments</comments>
		<pubDate>Sun, 01 Jun 2008 01:26:36 +0000</pubDate>
		<dc:creator>Dougal</dc:creator>
		
		<category><![CDATA[Server Technology]]></category>

		<category><![CDATA[Aptana]]></category>

		<category><![CDATA[Cloud computing]]></category>

		<category><![CDATA[hands on]]></category>

		<category><![CDATA[jaxer]]></category>

		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://blog.dougalmatthews.com/?p=13</guid>
		<description><![CDATA[I received beta access today to Aptana cloud, something I’d previously mentioned. Aptana cloud is targeted at rapid development, in particular web applications that need to scale rapidly (think Facebook applications etc.)
Aptana cloud plugs nicely into the Aptana IDE as you would expect and as an extra treat it comes with a beta version of [...]]]></description>
			<content:encoded><![CDATA[<p>I received beta access today to Aptana cloud, something I’d <a href="http://blog.dougalmatthews.com/2008/04/aptana-cloud/">previously mentioned</a>. Aptana cloud is targeted at rapid development, in particular web applications that need to scale rapidly (think Facebook applications etc.)</p>
<p>Aptana cloud plugs nicely into the Aptana IDE as you would expect and as an extra treat it comes with a beta version of the new PHP editor and a pre-release version of Jaxer 1.0. This post will discuss some of the key features and my experience of trying out for the first time&#8230;</p>
<p>The only obvious change after the install if you can see a cloud control button next the Jaxer button at the top of the IDE.</p>
<p><a href="http://blog.dougalmatthews.com/wp-content/uploads/2008/06/1.jpg"><img class="alignnone size-thumbnail wp-image-14" title="1" src="http://blog.dougalmatthews.com/wp-content/uploads/2008/06/1-150x150.jpg" alt="Showing IDE changes" width="150" height="150" /></a></p>
<p>After creating a project it then is automatically available in the cloud options.</p>
<p><a href="http://blog.dougalmatthews.com/wp-content/uploads/2008/06/2.jpg"><img class="alignnone size-thumbnail wp-image-15" title="2" src="http://blog.dougalmatthews.com/wp-content/uploads/2008/06/2-150x150.jpg" alt="" width="150" height="150" /></a></p>
<p>When you click on the project under the cloud menu you are taken through a (very easy to use) wizard for configuration. This runs your through a few steps, setting up a site name, picking a payment plan (the beta is free), payment details and so on. Most of these screens are fairly standard, however the service selection is quite interesting. I imagine these prices are not final, so just take them with a pinch of salt.</p>
<p><a href="http://blog.dougalmatthews.com/wp-content/uploads/2008/06/3.jpg"><img class="alignnone size-thumbnail wp-image-16" title="3" src="http://blog.dougalmatthews.com/wp-content/uploads/2008/06/3-150x150.jpg" alt="" width="150" height="150" /></a></p>
<p>The payment scheme seems to be quite flexible and we can see a large number of services that are included, PHP being the main server side language at the moment, with Aptana Jaxer still being a beta&#8230; (Ruby of Rails is on the &#8216;coming soon&#8217; list). The prices range from the cheapest being 256 MB ram and 5 GB hard disc for $0.99 a day, up to 2 GB of ram and 25 GB hard disc for $8.22 a day. Seems fairly reasonably priced.</p>
<p>After set-up is finished, it phones home and does some magic. Shortly after displaying the following screen;</p>
<p><a href="http://blog.dougalmatthews.com/wp-content/uploads/2008/06/4.jpg"><img class="alignnone size-thumbnail wp-image-17" title="4" src="http://blog.dougalmatthews.com/wp-content/uploads/2008/06/4-150x150.jpg" alt="" width="150" height="150" /></a></p>
<p>And sure enough, browse on over to http://mycloud.aptanacloud.com/ to see the following screen.</p>
<p><a href="http://blog.dougalmatthews.com/wp-content/uploads/2008/06/5.jpg"><img class="alignnone size-thumbnail wp-image-18" title="5" src="http://blog.dougalmatthews.com/wp-content/uploads/2008/06/5-150x150.jpg" alt="" width="150" height="150" /></a></p>
<p>After that, you’re set up. You can go ahead and develop the application as normal. When you next go into the project in the cloud menu it provides you with a simple synchronisation process for uploading new and changed files. Going to http://mycloud.aptanacloud.com/index.php shows the output of a phpinfo. Currently running 5.2.5, thankfully nice and up to date! Doesn’t look like you are able to use pear however&#8230; that is shame.</p>
<p>This has been a very quick into, just to show exactly how easy it is to get started with a new project, there is a whole host of facilities that have been integrated that I&#8217;ve not covered. See the following screenshot for a quick look-see. Database management, SVN, back-ups and more all now easily managed from one IDE.</p>
<p><a href="http://blog.dougalmatthews.com/wp-content/uploads/2008/06/6.jpg"><img class="alignnone size-thumbnail wp-image-19" title="6" src="http://blog.dougalmatthews.com/wp-content/uploads/2008/06/6-150x150.jpg" alt="" width="150" height="150" /></a></p>
<p>The first questions that then spring to mind are, I don’t see how to develop with two versions for testing etc. As we don’t want to be testing under a live environment do we! I’m assuming there is also a way for developing with SVN and having multiple developers working on the same projects.</p>
<p>All in all, I’m quite impressed and look forward to seeing this develop further.</p>
<p>I’ve liked the idea of Jaxer since I first heard about it, now with Aptana cloud I’ve got some online hosting where I can try out a few things. Expect some Jaxer posts coming soon! <img src='http://blog.dougalmatthews.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>p.s. I didn&#8217;t notice any of the new PHP features&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.dougalmatthews.com/2008/06/aptana-cloud-hands-on/feed/</wfw:commentRss>
		</item>
		<item>
		<title>JavaScript Object Manipulation</title>
		<link>http://blog.dougalmatthews.com/2008/05/object-manipulation/</link>
		<comments>http://blog.dougalmatthews.com/2008/05/object-manipulation/#comments</comments>
		<pubDate>Sun, 25 May 2008 22:16:15 +0000</pubDate>
		<dc:creator>Dougal</dc:creator>
		
		<category><![CDATA[JavaScript]]></category>

		<category><![CDATA[Language Features]]></category>

		<category><![CDATA[augmentation]]></category>

		<category><![CDATA[lambda]]></category>

		<category><![CDATA[syntactic sugar]]></category>

		<guid isPermaLink="false">http://blog.dougalmatthews.com/?p=12</guid>
		<description><![CDATA[JavaScript is a very dynamic language, so much so that you can redefine and change objects on the fly. This can be a strange concept to programmers from a more traditional OO background such as Java or C#, however once made familiar it can be very useful.
This feature is not restricted to modifying your own [...]]]></description>
			<content:encoded><![CDATA[<p class="MsoNormal">JavaScript is a very dynamic language, so much so that you can redefine and change objects on the fly. This can be a strange concept to programmers from a more traditional OO background such as Java or C#, however once made familiar it can be very useful.</p>
<p class="MsoNormal">This feature is not restricted to modifying your own objects; you can change the built in JavaScript objects. Take the following example, First a simple demo environment;</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.01//EN&quot; &quot;http://www.w3.org/TR/html4/strict.dtd&quot;&gt;
</div>
</li>
<li class="li1">
<div class="de1">&lt;html&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &lt;head&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=iso-8859-1&quot; /&gt;
</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &lt;title&gt;Object Creation and Manipulation&lt;/title&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &lt;/head&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &lt;body&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;
</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &lt;div id=&quot;mydiv&quot;&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &lt;/div&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &lt;script type=&quot;text/javascript&quot; src=&quot;js.js&quot;&gt;&lt;/script&gt;
</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &lt;/body&gt;
</div>
</li>
<li class="li1">
<div class="de1">&lt;/html&gt;</div>
</li>
</ol>
</div>
<p class="MsoNormal">Now a short bit of JavaScript in the js.js file&#8230;</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">var</span> div = document.<span class="me1">getElementById</span><span class="br0">&#40;</span><span class="st0">&#8216;mydiv&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">div.<span class="me1">hide</span> = <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">style</span>.<span class="me1">display</span> = <span class="st0">&quot;none&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">div.<span class="me1">hide</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">div.<span class="me1">show</span> = <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">style</span>.<span class="me1">display</span> = <span class="st0">&quot;&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">div.<span class="me1">show</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<p class="MsoNormal">When the JavaScript file is called it initially retrieves the mydiv object from the DOM tree. Next are the interesting lines; “div.hide = function(){&#8230;” assigns a new function object to ‘hide’ on the object. This doesn’t need to be predefined in any particular way. Then inside the curly brackets you can write a function much as you normally would. However, note that the ‘this’ keyword inside the function relates to the object that the function will be inside.</p>
<p class="MsoNormal">After this function is created the following lines show that is it called just like a normal function. To demonstrate what it is doing it is worth noting that this could be done by doing;</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">var</span> div = document.<span class="me1">getElementById</span><span class="br0">&#40;</span><span class="st0">&#8216;mydiv&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">div.<span class="me1">style</span>.<span class="me1">display</span> = <span class="st0">&quot;none&quot;</span>;</div>
</li>
</ol>
</div>
<p class="MsoNormal">This works quite well, however say you want to add this to a number of Elements if not all? This could be a hassle. Rather than extending that particular object, we extend the object that it derives from. This works with the same HTML.</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">Element.<span class="me1">prototype</span>.<span class="me1">destroy</span> = <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">parentNode</span>.<span class="me1">removeChild</span><span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">var</span> div = document.<span class="me1">getElementById</span><span class="br0">&#40;</span><span class="st0">&#8216;mydiv&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">alert</span><span class="br0">&#40;</span>div<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">div.<span class="me1">destroy</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">div = document.<span class="me1">getElementById</span><span class="br0">&#40;</span><span class="st0">&#8216;mydiv&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">alert</span><span class="br0">&#40;</span>div<span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<p class="MsoNormal">The above code adds a function to all elements. This means all the different HTML elements in the page will then have this function available to them. This easily allows you to add useful helper functions that you will re-use on a particular website.</p>
<p class="MsoNormal">You can change other objects too. Remember in JavaScript Arrays and Functions are objects, so you can augment these in much the same way. For example, the following function gets every second item in an array.</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">Array.<span class="me1">prototype</span>.<span class="me1">odd</span> = <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">var</span> newArray = <span class="br0">&#91;</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">for</span><span class="br0">&#40;</span><span class="kw2">var</span> x=<span class="nu0">0</span>;x&lt;this.<span class="me1">length</span>;x=x<span class="nu0">+2</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; newArray.<span class="me1">push</span><span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#91;</span>x<span class="br0">&#93;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <span class="kw1">return</span> newArray;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">var</span> test = <span class="br0">&#91;</span><span class="nu0">1</span>,<span class="nu0">2</span>,<span class="nu0">3</span>,<span class="nu0">4</span>,<span class="nu0">5</span>,<span class="nu0">6</span>,<span class="nu0">7</span>,<span class="nu0">8</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">alert</span><span class="br0">&#40;</span>test.<span class="me1">odd</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<p class="MsoNormal">
<p class="MsoNormal"><em>Note this example is only tested for FireFox/Opera. IE example to come soon. It should work in Safari, but I&#8217;m macless and can&#8217;t test.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.dougalmatthews.com/2008/05/object-manipulation/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Lambda Functions - Does your language support it?</title>
		<link>http://blog.dougalmatthews.com/2008/05/lambda-functions/</link>
		<comments>http://blog.dougalmatthews.com/2008/05/lambda-functions/#comments</comments>
		<pubDate>Sun, 18 May 2008 15:47:40 +0000</pubDate>
		<dc:creator>Dougal</dc:creator>
		
		<category><![CDATA[JavaScript]]></category>

		<category><![CDATA[Language Features]]></category>

		<category><![CDATA[PHP]]></category>

		<category><![CDATA[Python]]></category>

		<category><![CDATA[lambda]]></category>

		<guid isPermaLink="false">http://blog.dougalmatthews.com/?p=11</guid>
		<description><![CDATA[What are Lambda functions? Basically lambdas are functions that can be treated as anonymous or as objects. It depends on the language that is being used. They are very useful and at the core of the Functional Programming paradigm. So what languages can you create lambas in? Here is a few;
JavaScript



var foo = function&#40;x, y&#41;&#123;


&#160; [...]]]></description>
			<content:encoded><![CDATA[<p class="MsoNormal">What are Lambda functions? Basically lambdas are functions that can be treated as anonymous or as objects. It depends on the language that is being used. They are very useful and at the core of the Functional Programming paradigm. So what languages can you create lambas in? Here is a few;</p>
<p class="MsoNormal"><strong>JavaScript</strong></p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">var</span> foo = <span class="kw2">function</span><span class="br0">&#40;</span>x, y<span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">return</span> x + y;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2"><span class="kw3">alert</span><span class="br0">&#40;</span>foo<span class="br0">&#40;</span><span class="nu0">2</span>, <span class="nu0">4</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<p class="MsoNormal"><strong>PHP</strong></p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="re0">$foo</span> = <a href="http://www.php.net/create_function"><span class="kw3">create_function</span></a><span class="br0">&#40;</span><span class="st0">&#8216;$x,$y&#8217;</span>, <span class="st0">&#8216;return $x + $y;&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="re0">$foo</span><span class="br0">&#40;</span><span class="nu0">2</span>,<span class="nu0">4</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<p class="MsoNormal"><strong>Python</strong></p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">foo = <span class="kw1">lambda</span> x, y: x + y</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">print</span> foo<span class="br0">&#40;</span><span class="nu0">2</span>,<span class="nu0">4</span><span class="br0">&#41;</span></div>
</li>
</ol>
</div>
<p class="MsoNormal">These are of course very simple examples and don’t show the full potential. I’ve been a fan of lambdas for a while now and wanted to see what languages supported them. If you know of others you want me to add, post them in the comments. I know many other languages can, I just posted up the languages I&#8217;m familiar with.</p>
<p class="MsoNormal">I think out of all the examples I’ve looked at so far I like the style of them most in either JavaScript of Python.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.dougalmatthews.com/2008/05/lambda-functions/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Galactocracy</title>
		<link>http://blog.dougalmatthews.com/2008/05/galactocracy/</link>
		<comments>http://blog.dougalmatthews.com/2008/05/galactocracy/#comments</comments>
		<pubDate>Sun, 11 May 2008 21:28:01 +0000</pubDate>
		<dc:creator>Dougal</dc:creator>
		
		<category><![CDATA[Facebook]]></category>

		<category><![CDATA[Galactocracy]]></category>

		<category><![CDATA[Projects]]></category>

		<category><![CDATA[facebook app]]></category>

		<category><![CDATA[plug]]></category>

		<guid isPermaLink="false">http://blog.dougalmatthews.com/?p=10</guid>
		<description><![CDATA[It’s been a busy week so I don’t have much time to write. Therefore, I’m just going to do a quick plug of a Facebook application I made with some friends. Don’t worry – it’s not one of those applications that’s going to be annoying and force you do invite people or ask you silly [...]]]></description>
			<content:encoded><![CDATA[<p>It’s been a busy week so I don’t have much time to write. Therefore, I’m just going to do a quick plug of a Facebook application I made with some friends. Don’t worry – it’s not one of those applications that’s going to be annoying and force you do invite people or ask you silly questions in an attempt to tell you who you really are.</p>
<p>Galactocracy rather is a turn based strategy game, similar in some ways to the board game risk. However it is set in space.</p>
<p>So anyway, there isn’t much point in me telling you too much about it. I think the game sells itself when you give it a shot.</p>
<p>So why not head over to <a href="http://apps.facebook.com/galactocracy/">http://apps.facebook.com/galactocracy/</a> and try it out.</p>
<p>I’ll be waiting for you at the other side of the battlefield to fight it out for supreme control over the universe <img src='http://blog.dougalmatthews.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>P.S. Next I&#8217;m going to be covering something JavaScript or Python. Not sure what yet, maybe something a little bit silly just for fun.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.dougalmatthews.com/2008/05/galactocracy/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Analysing PHP Objects and Classes</title>
		<link>http://blog.dougalmatthews.com/2008/05/analysing-php-objects-and-classes/</link>
		<comments>http://blog.dougalmatthews.com/2008/05/analysing-php-objects-and-classes/#comments</comments>
		<pubDate>Mon, 05 May 2008 20:43:54 +0000</pubDate>
		<dc:creator>Dougal</dc:creator>
		
		<category><![CDATA[PHP]]></category>

		<category><![CDATA[Tips and tricks]]></category>

		<category><![CDATA[classes]]></category>

		<category><![CDATA[objects]]></category>

		<category><![CDATA[reflection]]></category>

		<category><![CDATA[reflection export]]></category>

		<guid isPermaLink="false">http://blog.dougalmatthews.com/?p=9</guid>
		<description><![CDATA[Due to the dynamic nature of PHP as a programming language it can be quite difficult to determine what is happening. This is then even harder if you don’t have access to debugging tools such as those in Zend Studio.
How can you view an object?



header&#40;&#34;Content-Type: text/plain&#34;&#41;;


error_reporting&#40;E_ALL&#41;;


&#160;


class Foo &#123;


&#160;


private $name = &#34;Fred&#34;;


private $age = 30;


&#160;


public function [...]]]></description>
			<content:encoded><![CDATA[<p class="MsoNormal"><span lang="EN-GB">Due to the dynamic nature of PHP as a programming language it can be quite difficult to determine what is happening. This is then even harder if you don’t have access to debugging tools such as those in Zend Studio.</span></p>
<p class="MsoNormal"><strong><span lang="EN-GB">How can you view an object?</span></strong></p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><a href="http://www.php.net/header"><span class="kw3">header</span></a><span class="br0">&#40;</span><span class="st0">&quot;Content-Type: text/plain&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.php.net/error_reporting"><span class="kw3">error_reporting</span></a><span class="br0">&#40;</span><span class="kw2">E_ALL</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">class</span> Foo <span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">private</span> <span class="re0">$name</span> = <span class="st0">&quot;Fred&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">private</span> <span class="re0">$age</span> = <span class="nu0">30</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">public</span> <span class="kw2">function</span> __construct<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">public</span> <span class="kw2">function</span> bar<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="st0">&quot;Hello World&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$myFoo</span> = <span class="kw2">new</span> Foo<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.php.net/print_r"><span class="kw3">print_r</span></a><span class="br0">&#40;</span><span class="re0">$myFoo</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2"><span class="re0">$content</span> = <a href="http://www.php.net/print_r"><span class="kw3">print_r</span></a><span class="br0">&#40;</span><span class="re0">$myFoo</span>, <span class="kw2">true</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.php.net/var_dump"><span class="kw3">var_dump</span></a><span class="br0">&#40;</span><span class="re0">$myFoo</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<p>These all are all ways of outputting objects and can prove to be invaluable. I find using print_r particularly useful for logging data errors to a file or database that you can analyse later.</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">Foo Object</div>
</li>
<li class="li1">
<div class="de1"><span class="re1"><span class="br0">&#40;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#91;</span>name:<span class="kw2">private</span><span class="br0">&#93;</span> =&gt; Fred</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#91;</span>age:<span class="kw2">private</span><span class="br0">&#93;</span> =&gt; <span class="nu0">30</span></div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#41;</span></span></div>
</li>
<li class="li1">
<div class="de1">object<span class="br0">&#40;</span>Foo<span class="br0">&#41;</span><span class="co2">#1 (2) {</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#91;</span><span class="st0">&quot;name:private&quot;</span><span class="br0">&#93;</span>=&gt;</div>
</li>
<li class="li1">
<div class="de1">string<span class="br0">&#40;</span><span class="nu0">4</span><span class="br0">&#41;</span> <span class="st0">&quot;Fred&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#91;</span><span class="st0">&quot;age:private&quot;</span><span class="br0">&#93;</span>=&gt;</div>
</li>
<li class="li2">
<div class="de2">int<span class="br0">&#40;</span><span class="nu0">30</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p class="MsoNormal"><strong><span lang="EN-GB">Reflection</span></strong></p>
<p class="MsoNormal"><span lang="EN-GB">“In computer science, reflection is the process by which a computer program can observe and modify its own structure and </span><span style="font-size: 12pt; line-height: 115%; font-family: " lang="EN-GB">behaviour</span><span lang="EN-GB">. The programming paradigm driven by reflection is called reflective programming.” Wikipedia (http://en.wikipedia.org/wiki/Reflection_%28computer_science%29) .</span></p>
<p class="MsoNormal"><span lang="EN-GB">Ok, so what does that mean? Basically, Reflection is a way of programmatically dealing with classes. So you can find out information about them. Including the properties and values.</span></p>
<p class="MsoNormal"><strong><span lang="EN-GB"> </span></strong></p>
<p class="MsoNormal"><strong><span lang="EN-GB">What’s inside a class?</span></strong></p>
<p class="MsoNormal"><span lang="EN-GB">As of PHP 5 there is now a very powerful reflection library available. This includes a number of very useful objects.<strong> </strong>The two we will be focusing on are ReflectionClass and Reflection. Here is the one liner that can do it all&#8230;.</span></p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">Reflection::<span class="me2">export</span><span class="br0">&#40;</span><span class="kw2">new</span> ReflectionClass<span class="br0">&#40;</span><span class="st0">&#8216;SimpleXMLElement&#8217;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<p class="MsoNormal"><span lang="EN-GB"> </span></p>
<p class="MsoNormal">To set up a simple test case for this I used;</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><a href="http://www.php.net/header"><span class="kw3">header</span></a><span class="br0">&#40;</span><span class="st0">&quot;Content-Type: text/plain&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.php.net/error_reporting"><span class="kw3">error_reporting</span></a><span class="br0">&#40;</span><span class="kw2">E_ALL</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">Reflection::<span class="me2">export</span><span class="br0">&#40;</span><span class="kw2">new</span> ReflectionClass<span class="br0">&#40;</span><span class="st0">&#8216;SimpleXMLElement&#8217;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<p>This creates quite a bit of output;</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">Class</span> <span class="br0">&#91;</span> &nbsp; <span class="kw2">class</span> SimpleXMLElement implements Traversable <span class="br0">&#93;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">- Constants <span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">- <a href="http://www.php.net/static"><span class="kw3">Static</span></a> properties <span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">- <a href="http://www.php.net/static"><span class="kw3">Static</span></a> methods <span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">- Properties <span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">- Methods <span class="br0">&#91;</span><span class="nu0">12</span><span class="br0">&#93;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">Method <span class="br0">&#91;</span> &nbsp;final <span class="kw2">public</span> method __construct <span class="br0">&#93;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">Method <span class="br0">&#91;</span> &nbsp;<span class="kw2">public</span> method asXML <span class="br0">&#93;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">Method <span class="br0">&#91;</span> &nbsp;<span class="kw2">public</span> method saveXML <span class="br0">&#93;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">Method <span class="br0">&#91;</span> &nbsp;<span class="kw2">public</span> method xpath <span class="br0">&#93;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">Method <span class="br0">&#91;</span> &nbsp;<span class="kw2">public</span> method registerXPathNamespace <span class="br0">&#93;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">Method <span class="br0">&#91;</span> &nbsp;<span class="kw2">public</span> method attributes <span class="br0">&#93;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">Method <span class="br0">&#91;</span> &nbsp;<span class="kw2">public</span> method children <span class="br0">&#93;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">Method <span class="br0">&#91;</span> &nbsp;<span class="kw2">public</span> method getNamespaces <span class="br0">&#93;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">Method <span class="br0">&#91;</span> &nbsp;<span class="kw2">public</span> method getDocNamespaces <span class="br0">&#93;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">Method <span class="br0">&#91;</span> &nbsp;<span class="kw2">public</span> method getName <span class="br0">&#93;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">Method <span class="br0">&#91;</span> &nbsp;<span class="kw2">public</span> method addChild <span class="br0">&#93;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">Method <span class="br0">&#91;</span> &nbsp;<span class="kw2">public</span> method addAttribute <span class="br0">&#93;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>So what does it all mean? It’s quite a bit to read through. So starting from the top;</p>
<p>Line one shows us the definition of the class but it’s got a few things more than we are used to seeing. The first being &lt;internal:SimpleXML&gt;. This means that it exists internally, as in its implemented in C code rather than native PHP. SimpleXML is the name of the package that the class is in. Then on this line we can see the name of the class, any classes it extends and any interfaces it implements.<br />
The next step as we go in we can see its divided into various different sections. These are fairly self explanatory so I won’t go into too much detail. Again, for each method you can see its implemented internally and is in the SimpleXML package.</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><a href="http://www.php.net/header"><span class="kw3">header</span></a><span class="br0">&#40;</span><span class="st0">&quot;Content-Type: text/plain&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.php.net/error_reporting"><span class="kw3">error_reporting</span></a><span class="br0">&#40;</span><span class="kw2">E_ALL</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">class</span> Test<span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">private</span> <span class="kw2">function</span> hello<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">Reflection::<span class="me2">export</span><span class="br0">&#40;</span><span class="kw2">new</span> ReflectionClass<span class="br0">&#40;</span><span class="st0">&#8216;Test&#8217;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<p>The above example is the same as before but with a simple class made up for it. The output follows</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">Class</span> <span class="br0">&#91;</span> &nbsp;<span class="kw2">class</span> Test <span class="br0">&#93;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">@@ C:\Important\www\BlogExamples\<span class="nu0">5</span>. Analysing PHP Objects and Classes\reflection.php <span class="nu0">6</span><span class="nu0">-12</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">- Constants <span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">- <a href="http://www.php.net/static"><span class="kw3">Static</span></a> properties <span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">- <a href="http://www.php.net/static"><span class="kw3">Static</span></a> methods <span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">- Properties <span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">- Methods <span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">Method <span class="br0">&#91;</span> &nbsp;<span class="kw2">private</span> method hello <span class="br0">&#93;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">@@ C:\Important\www\BlogExamples\<span class="nu0">5</span>. Analysing PHP Objects and Classes\reflection.php <span class="nu0">8</span> - <span class="nu0">10</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>This has a very similar result to the output on the SimpleXMLElement in terms of the content. The key differences are, internal is now replaced by &#8216;user&#8217; and rather than have a package name there is a special value represented by &#8216;@@&#8217; that shows where the code resides. It&#8217;s nice to see it even shows the line numbers for the class and the methods.</p>
<p class="MsoNormal"><strong><span lang="EN-GB">So&#8230; </span></strong></p>
<p>What is this all useful for? Generally on the whole PHP&#8217;s documentation is very good. However, it doesn&#8217;t always show the differences between versions of PHP clearly, some of the newer features remain less well documented or perhaps the documentation doesn&#8217;t have good coverage in your native language.</p>
<p>Either way, will this ever replace reading the source code and documentation? Well, probably not. However for internal code thats written in C unless you want to read that it makes for quite a handy reference.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.dougalmatthews.com/2008/05/analysing-php-objects-and-classes/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Aptana Cloud</title>
		<link>http://blog.dougalmatthews.com/2008/04/aptana-cloud/</link>
		<comments>http://blog.dougalmatthews.com/2008/04/aptana-cloud/#comments</comments>
		<pubDate>Tue, 29 Apr 2008 17:23:40 +0000</pubDate>
		<dc:creator>Dougal</dc:creator>
		
		<category><![CDATA[Server Technology]]></category>

		<category><![CDATA[Aptana]]></category>

		<category><![CDATA[Cloud comptuing]]></category>

		<category><![CDATA[New Releases]]></category>

		<guid isPermaLink="false">http://blog.dougalmatthews.com/?p=8</guid>
		<description><![CDATA[From the makers of the Aptana IDE and Jaxer. We have another interesting product, Aptana Cloud.  There is plenty of coverage out there already so I wont attempt to compete. Here are some of the best;

Aptana  Cloud home
Ajaxian : Aptana cloud develop on your desktop sync out to the cloud
eWeek - Aptana to [...]]]></description>
			<content:encoded><![CDATA[<p>From the makers of the Aptana IDE and Jaxer. We have another interesting product, Aptana Cloud.  There is plenty of coverage out there already so I wont attempt to compete. Here are some of the best;</p>
<ul>
<li><a title="Aptana Cloud website" href="http://aptana.com/cloud" target="_blank">Aptana  Cloud home</a></li>
<li><a href="http://ajaxian.com/archives/aptana-cloud-develop-on-your-desktop-sync-out-to-the-cloud">Ajaxian : Aptana cloud develop on your desktop sync out to the cloud</a></li>
<li><a href="http://www.eweek.com/c/a/Application-Development/Aptana-to-Launch-Cloud-Platform/">eWeek - Aptana to Launch Cloud Platform</a></li>
</ul>
<p>This looks very interesting to me and I&#8217;m a big supporter of all things JavaScript (note you don&#8217;t have to use JavaScript for Aptana Cloud).</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.dougalmatthews.com/2008/04/aptana-cloud/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Lazy Loading in PHP with __autoload</title>
		<link>http://blog.dougalmatthews.com/2008/04/php-__autoload/</link>
		<comments>http://blog.dougalmatthews.com/2008/04/php-__autoload/#comments</comments>
		<pubDate>Sat, 26 Apr 2008 13:35:06 +0000</pubDate>
		<dc:creator>Dougal</dc:creator>
		
		<category><![CDATA[Design Patterns]]></category>

		<category><![CDATA[Magic Methods]]></category>

		<category><![CDATA[PHP]]></category>

		<category><![CDATA[lazy loading]]></category>

		<category><![CDATA[spl_autoload]]></category>

		<guid isPermaLink="false">http://blog.dougalmatthews.com/?p=7</guid>
		<description><![CDATA[__autoload is one of the magic methods added to PHP in version 5. It creates a very easy way for you to manage all your different class files. Actually, with __autoload you don’t need to manage them.
Often you will see in PHP projects files that include the other files needed for that page. You can [...]]]></description>
			<content:encoded><![CDATA[<p class="MsoNormal">__autoload is one of the magic methods added to PHP in version 5. It creates a very easy way for you to manage all your different class files. Actually, with __autoload you don’t need to manage them.</p>
<p class="MsoNormal">Often you will see in PHP projects files that include the other files needed for that page. You can then end up with a while bunch of require_once calls and so on. This can be quite tedious to maintain and you may not always need all the files.</p>
<p class="MsoNormal">When you create a new instance of a class PHP checks for it and if it can’t be found the __autoload method is called. It’s passed in one parameter, the name of the class.</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">function</span> __autoload<span class="br0">&#40;</span><span class="re0">$class</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">require</span> <span class="st0">&quot;/path/to/class/files/$class.php&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$x</span> = <span class="kw2">new</span> Foo<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<p class="MsoNormal"><span>Above is a simple example of autoload in action. When a new Foo is created the autoload function requires <strong><span style="background: white none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;">/path/to/class/files/Foo.php</span></strong>. So with a simple naming convention each class in its own file where the file name is the name of the class (similar to Java) you can easily include files.</span></p>
<p class="MsoNormal"><span>This example can be taken slightly further to manage hierarchies of classes&#8230;</span></p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">function</span> __autoload<span class="br0">&#40;</span><span class="re0">$class</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re0">$class</span> = <a href="http://www.php.net/str_replace"><span class="kw3">str_replace</span></a><span class="br0">&#40;</span><span class="st0">&#8216;_&#8217;</span>, <span class="st0">&#8216;/&#8217;</span>, <span class="re0">$class</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re0">$path</span> = <span class="st0">&quot;/path/to/class/files/$class.php&quot;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <span class="kw1">require</span> <span class="re0">$path</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$x</span> = <span class="kw2">new</span> Foo_Bar<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<p class="MsoNormal"><span>The above code simply replaces all underscores ( _ ) with forward slashes ( / ) before requiring the class. The naming convention changes slightly for this, the class name Foo_Bar would be found in following path: <span style="background: white none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"><span> </span><strong>/path/to/class/files/Foo/Bar.php</strong></span>.</span></p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">function</span> __autoload<span class="br0">&#40;</span><span class="re0">$class</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re0">$class</span> = <a href="http://www.php.net/str_replace"><span class="kw3">str_replace</span></a><span class="br0">&#40;</span><span class="st0">&#8216;_&#8217;</span>, <span class="st0">&#8216;/&#8217;</span>, <span class="re0">$class</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re0">$path</span> = <span class="st0">&quot;/path/to/class/files/$class.php&quot;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><a href="http://www.php.net/file_exists"><span class="kw3">file_exists</span></a><span class="br0">&#40;</span><span class="re0">$path</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">require</span> <span class="re0">$path</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Error handling here, log it etc.</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Exceptions cannot be thrown.</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2"><span class="re0">$x</span> = <span class="kw2">new</span> Foo_Bar_Fail<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<p class="MsoNormal"><span>The final example shows the same code again with some optional error checking. It allows you to log errors and so on. However, exceptions cannot be thrown by __autoload unless its being called by <a href="http://uk.php.net/class_exists">class_exists</a>. Since this function calls autoload to look for classes. When trying to throw exceptions, PHP runs into a fatal error before its thrown due to the order or __autload. This means a fatal error will be triggered as the class can&#8217;t be found and the exception will vanish.</span></p>
<p class="MsoNormal">Following up to this post I plan to do one of spl_autoload soon. With this you can have PHP automatically run its own autoload procedure on include paths. For further reading on this follow the link below. The documentation is a little sparse however.</p>
<p class="MsoNormal"><span> </span></p>
<p class="MsoNormal"><span>Enjoy, lazy loading!</span></p>
<p class="MsoNormal"><span> </span></p>
<p class="MsoNormal"><span>Useful links;</span></p>
<p class="MsoNormal">
<ul>
<li><a href="http://uk3.php.net/__autoload">Official PHP documentation on __autoload </a></li>
<li><a href="http://uk3.php.net/manual/en/function.spl-autoload.php">Official PHP documentation on spl_autoload</a></li>
<p class="MsoNormal"><span> </span></p>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.dougalmatthews.com/2008/04/php-__autoload/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Design Patterns: Singleton</title>
		<link>http://blog.dougalmatthews.com/2008/04/design-patterns-the-singleton/</link>
		<comments>http://blog.dougalmatthews.com/2008/04/design-patterns-the-singleton/#comments</comments>
		<pubDate>Sat, 19 Apr 2008 20:17:59 +0000</pubDate>
		<dc:creator>Dougal</dc:creator>
		
		<category><![CDATA[Design Patterns]]></category>

		<category><![CDATA[desgin patterns]]></category>

		<category><![CDATA[PHP]]></category>

		<category><![CDATA[Singleton]]></category>

		<guid isPermaLink="false">http://blog.dougalmatthews.com/?p=6</guid>
		<description><![CDATA[The singleton design pattern is a way of enforcing only one instance of an object. This is achieved by making 3 fairly simple steps to a class. Firstly making the constructor private, creating a static member variable that will contain the instance and then creating a static method for accessing the instance.
So, In PHP it [...]]]></description>
			<content:encoded><![CDATA[<p class="MsoNormal"><span lang="EN-US">The singleton design pattern is a way of enforcing only one instance of an object. This is achieved by making 3 fairly simple steps to a class. Firstly making the constructor private, creating a static member variable that will contain the instance and then creating a static method for accessing the instance.</span></p>
<p class="MsoNormal"><span lang="EN-US">So, In PHP it would be;</span></p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">class</span> Foo <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">private</span> <a href="http://www.php.net/static"><span class="kw3">static</span></a> <span class="re0">$instance</span> = <span class="kw2">null</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; </div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <span class="kw2">private</span> <span class="kw2">function</span> __construct<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Private, so can’t be accessed from outside</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">private</span> <a href="http://www.php.net/static"><span class="kw3">static</span></a> <span class="kw2">function</span> getInstance<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="re0">$this</span>-&gt;<span class="me1">instance</span> == <span class="kw2">null</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span>-&gt;<span class="me1">instance</span> = <span class="kw2">new</span> Foo<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="re0">$this</span>-&gt;<span class="me1">instance</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> bar<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="st0">&quot;I am one, I am a singleton!&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; </div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">// Example usage</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$foo</span> = Foo::<span class="me2">getInstance</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$foo</span>-&gt;<span class="me1">bar</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2"><span class="co1">// or the chaining method</span></div>
</li>
<li class="li1">
<div class="de1">Foo::<span class="me2">getInstance</span><span class="br0">&#40;</span><span class="br0">&#41;</span>-&gt;<span class="me1">bar</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">// Note this will not work</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$myfoo</span> = <span class="kw2">new</span> Foo<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<p class="MsoNormal">Why are singletons good? It’s almost like a global object right? What is good about a singleton as opposed to a concrete class? A concrete class has more flexibility as you can create multiple instances and then each instance can of course be different. However, what if you only ever want one instance of an object and ensure you don&#8217;t accidentally make another instance (or another developer doesn&#8217;t). You could use globals but they need to be managed somehow and people can still make mistakes and forget things.</p>
<p class="MsoNormal">The most common example is a database class, you might want to make sure that you only open one connection to the database. Creating multiple instances of database class could (depending how you programmed it) open multiple database connections and be inefficient.</p>
<p class="MsoNormal">The singleton can also be useful if an object that is used infrequently across a website. It can provide you easy access to it without having to worry about passing the object around. In the above code, you can access that object instance with this snippet of code &#8220;Foo::getInstance();&#8221;.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.dougalmatthews.com/2008/04/design-patterns-the-singleton/feed/</wfw:commentRss>
		</item>
		<item>
		<title>New Blog</title>
		<link>http://blog.dougalmatthews.com/2008/04/new-blog/</link>
		<comments>http://blog.dougalmatthews.com/2008/04/new-blog/#comments</comments>
		<pubDate>Sat, 12 Apr 2008 22:24:40 +0000</pubDate>
		<dc:creator>Dougal</dc:creator>
		
		<category><![CDATA[Site News]]></category>

		<category><![CDATA[about]]></category>

		<guid isPermaLink="false">http://blog.dougalmatthews.com/?p=5</guid>
		<description><![CDATA[So, this is my first post. Just a quick introduction to this blog and what you can expect to find here.
Interestingly I’ve always has mixed feelings about blogs. I’ve always been fairly anti personal blogs. They seem to be generally a waste of time, besides, who wants to know what I ate for breakfast? (I [...]]]></description>
			<content:encoded><![CDATA[<p class="MsoNormal"><span>So, this is my first post. Just a quick introduction to this blog and what you can expect to find here.</span></p>
<p class="MsoNormal"><span>Interestingly I’ve always has mixed feelings about blogs. I’ve always been fairly anti personal blogs. They seem to be generally a waste of time, besides, who wants to know what I ate for breakfast? (I skipped breakfast today by the way).  So instead of that, I&#8217;m  going to attempt to  make a blog based on my experiences as a developer.</span></p>
<p class="MsoNormal"><span>Basically, this blog is going to be strongly focused around programming. I’ll be covering a number of languages and platforms. Most likely this will depend on what I’m using in my studies or in the workplace at that time.</span></p>
<p class="MsoNormal"><span>I have a wide range of interests when it comes to programming, including JavaScript, PHP, .NET and everything in between. So you can expect coverage of all these topics in a fairly random order. Depending what takes my interest first!</span></p>
<p>I’m going to aim to try and do a post weekly, all going well and I’m not on holiday or something.</p>
<p>Some of the following are topic idea’s that I currently have;</p>
<ul>
<li><span>Design Patterns</span></li>
<li><span style="font-family: Symbol;"><span><span style="font-family: "> </span></span></span><span>Cover some of the less well documented PHP features. Such as the magic methods or Soap (SoapClient, SoapServer etc.).</span></li>
<li><span style="font-family: Symbol;"><span><span style="font-family: "> </span></span></span><span>Talking about new technologies such as Silverlight<span> </span>or Jaxer.</span></li>
<li><span><span> </span>Having fun with JavaScript – like animations  and pyhsics.</span></li>
</ul>
<p class="MsoNormal"><span>I’m also open open to suggestions of topics. Feel free to send them in.</span></p>
<p class="MsoNormal">
<p class="MsoNormal"><strong>Edit;</strong></p>
<p class="MsoNormal">On a side note, the design and layout of this page is going to be a work in progress. It&#8217;s not really the main focus of this website</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.dougalmatthews.com/2008/04/new-blog/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
