<?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>Professional PHP &#187; active-record</title>
	<atom:link href="http://www.procata.com/blog/archives/tag/active-record/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.procata.com/blog</link>
	<description>PHP Programming, Web Development, PHP Advocacy and PHP Best Practices.</description>
	<lastBuildDate>Tue, 20 Oct 2009 00:57:46 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Building a culture of objects in PHP</title>
		<link>http://www.procata.com/blog/archives/2006/01/13/building-a-culture-of-objects-in-php/</link>
		<comments>http://www.procata.com/blog/archives/2006/01/13/building-a-culture-of-objects-in-php/#comments</comments>
		<pubDate>Fri, 13 Jan 2006 07:36:25 +0000</pubDate>
		<dc:creator>Jeff</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[active-record]]></category>
		<category><![CDATA[design-patterns]]></category>
		<category><![CDATA[late-static-binding]]></category>
		<category><![CDATA[object-oriented-programming]]></category>
		<category><![CDATA[oop]]></category>
		<category><![CDATA[zend-framework]]></category>

		<guid isPermaLink="false">http://www.procata.com/blog/?p=150</guid>
		<description><![CDATA[This is a follow up post to Why isn&#8217;t PHP the natural successor to Java?
Joshua Eichorn (among others) notices that active record can&#8217;t work as shown in the Zend Framework webcast.  The syntax presented during the web cast is not possible in PHP because of inherited static methods are treated.  Mike Naberezny notes [...]]]></description>
			<content:encoded><![CDATA[<p>This is a follow up post to <a href="http://www.procata.com/blog/archives/2005/09/29/why-isnt-php-the-natural-successor-to-java/">Why isn&#8217;t PHP the natural successor to Java?</a></p>
<p>Joshua Eichorn (<a href="http://shiflett.org/archive/171">among others</a>) notices that <a href="http://blog.joshuaeichorn.com/archives/2006/01/09/zactiverecord-cant-work/">active record can&#8217;t work</a> as shown in the <a href="http://www.procata.com/blog/archives/2005/12/05/zend-framework-webcast/">Zend Framework webcast</a>.  The syntax presented during the web cast is not possible in PHP because of inherited static methods are treated.  Mike Naberezny notes the problem and suggests that it will end up getting fixed in PHP:</p>
<blockquote><p>Weâ€™ve been working on the solution to the problem with statics on the C front, so eventually it will be solved there.</p></blockquote>
<p>In the sitepoint thread <a href="http://www.sitepoint.com/forums/showthread.php?t=334377">Trouble in Zend Framework Land?</a>, 33degrees smells vaporware:</p>
<blockquote><p>I find it amusing that they did the webcast using that syntax, while there is currently no way of implementing it in PHP5. Makes you wonder how much code they&#8217;d actually written at that point.
</p></blockquote>
<p><a href="http://elizabethmariesmith.com/2006/01/09/annoying-statics-in-php/">Elizabeth Marie Smith</a> does too and adds:</p>
<blockquote><p>
I find it rather annoying that they havenâ€™t fixed the problem BEFORE now &#8211; after all, the bugs (marked bogus or wont fix because obviously the zend guys werenâ€™t using php5 at that point if they didnâ€™t see the problem until zend framework came along) the bugs/requests have been around for a LONG TIME
</p></blockquote>
<p>I look at this incident as an incredibly good omen.  My optimism about Zend&#8217;s PHP framework is not for the framework itself, but for what it means for OO support in PHP.  In my book, the more developers that have commit access to both ZPF and to PHP, the better PHP 6 will be for me.  I look at ZPF as an important step in building a culture of objects in the PHP community.</p>
<p>What?</p>
<p>In my previous post, I talked about how the leaders of the agile development culture seemed to be migrating from Java to Ruby with nary a glance at PHP.  One of the reasons is that PHP lacks a culture of objects.</p>
<p>Support for object oriented constructs in PHP is relatively new, rough, and uneven.  PHP competetors Ruby, Python, Java, and .NET all have OO class libraries, yet PHP does not.  The classes and interfaces that PHP does have are not necessarily what I would hold up as paragons of modern OO design.  </p>
<p>I can see why this would be the case. PHP is written in C.  Being an <a href="http://www.procata.com/blog/archives/2005/05/10/expert-programmers/">expert</a> in C programming does not necessarily make one an expert in object oriented programming (nor does it preclude it).  My impression from reading the php-dev mailing list is that of a C culture rather than a object culture.  (witness the <a href="http://www.procata.com/blog/archives/2004/07/29/goto-in-php/">goto vs exceptions</a> debate.)</p>
<p>I&#8217;ll save any critique of PHP&#8217;s built in classes for OO for future blog posts.  Instead, lets look at PHP&#8217;s documentation.  I regard PHP&#8217;s online documentation as excellent.  Its one of the factors that drew me to PHP in the first place.  I especially like the comments system.  Yet, go the the <a href="">front page</a> and search for one of the built in classes.  Try &#8220;exception.&#8221;  Helpful?  Did you know to switch the dropdown from the default functions option first?  I&#8217;d like to link to the documentation for the Exception class.  Where should I link?  Classes are not first class citizens in the PHP manual as functions are.</p>
<p>Try searching for the &#8216;getTraceAsString&#8217; method of the Exception class.  I&#8217;d like to leave a comment about it, where should I go?</p>
<p>My purpose is not to run down PHP&#8217;s support for objects.  Merely to suggest that there is more work yet to be done for first class support.</p>
<p>Ok, so PHP doesn&#8217;t exactly have a culture of objects.  Who cares about objects?</p>
<p>To answer that, I want to explore the complex relationship between PHP and Zend.  A good way to highlight the distinction is to look at the PHP usage numbers and the adoption rates for PHP 5.  While web hosts account for the vast majority of the PHP <a href="http://www.php.net/usage.php">usage numbers</a> as reported, they have been <a href="http://www.nexen.net/interview/index.php?id=50">slow to convert to PHP 5</a>.  On the other hand, <a href="http://www.internetnews.com/ent-news/article.php/3573486">Zend reports</a> that 50% of their customers have adopted PHP 5, suggesting that Zend&#8217;s customers are a bit different than the general PHP using population.</p>
<p>I think the PHP 5 adoption rates show that Zend&#8217;s customers care about objects. I suspect that some of the object support in PHP 5 is a result of feedback from Zend&#8217;s customers.</p>
<p>Zend is not a charity.  I would imagine the ZPF project consumes a great number of resources and they are doing it for a reason.  I think Zend&#8217;s customers also care about frameworks.  It sure looks to me like the ZPF project was triggered by Rails.</p>
<p>So somewhere in the ZPF project, they should be trying to do the same thing in rails and in ZPF and comparing the code.  (if they don&#8217;t there are a bunch of bloggers, me included, who will do it for them.)  I&#8217;m sure their customers will do it too.  Perhaps the Active Record syntax shown in the webcast was inspired from such a comparison?  I think that in order to look good in these comparisons, some aspects of PHP&#8217;s object support are going to have to be improved.  Static inheritance won&#8217;t be the last thing to get fixed.</p>
<p>Its is the zend framework effort thats going to put the finish on what PHP 5 started.  I honestly believe that PHP 6 is going to end up a runaway success.  (Is it still true that only the even numbered star trek moves are good?)</p>
<p>So if PHP doesn&#8217;t exactly have the best reputation as an object oriented language, what can we do about it.  Or specifically, what can Zend do about it?</p>
<p>Well, when Microsoft was being criticized for the lack of patterns in their PetStore example, what did the do?  One, they fixed it.  Two, they hired Martin Fowler&#8217;s company to <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnpatterns/html/esp.asp">write about .net patterns</a>.  Ever notice how many .Net patterns there are in Martin Fowler&#8217;s Patterns of Enterprise Application Architecture Book?</p>
<p>I&#8217;d like to see Zend hire a reputable object guru to help PHP turn around its object reputation.  This should be someone who is known outside the PHP community, someone who has been going to OOPSLA for longer than PHP has existed.  Someone who has a book on object oriented programming, articles, a blog, and who is an expert at teaching object oriented programming (<a href="http://www.procata.com/blog/archives/2005/05/10/expert-programmers/">10 years to be an expert</a>).  Writing and teaching help hone ones thoughts and this job requires a communicator.</p>
<p>To start, Zend can put this person to work both advising on ZPF and telling the world about ZPF.  However, I would hope a longer term goal would be to apply some deep experience in coordinating and advising on the classes and interfaces that are going into the language itself.</p>
<p>I would hate to see the sales objection &#8220;php&#8217;s functions are inconsistent&#8221; morph into &#8220;php&#8217;s classes are inconsistent.&#8221;  Not only that, today&#8217;s class and interface designs are going to be around a long time.  Public refactoring is not a good in a language class library or in a widely used framework.  Witness the slow adoption of PHP 5 and the problems with reference changes in 4.4, 5.0.5.  Deep experience can help get a better design at the outset.</p>
<p>I for one welcome our new object oriented overlords.  <img src='http://www.procata.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.procata.com/blog/archives/2006/01/13/building-a-culture-of-objects-in-php/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Zend Framework Webcast</title>
		<link>http://www.procata.com/blog/archives/2005/12/05/zend-framework-webcast/</link>
		<comments>http://www.procata.com/blog/archives/2005/12/05/zend-framework-webcast/#comments</comments>
		<pubDate>Mon, 05 Dec 2005 20:42:46 +0000</pubDate>
		<dc:creator>Jeff</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[active-record]]></category>
		<category><![CDATA[dependency-management]]></category>
		<category><![CDATA[pear]]></category>
		<category><![CDATA[pear-installer]]></category>
		<category><![CDATA[zend-framework]]></category>

		<guid isPermaLink="false">http://www.procata.com/blog/?p=164</guid>
		<description><![CDATA[I guess I missed the Zend PHP Framework webcast on Friday.  I was looking forward to it, but I signed up a while ago and forgot about it.  By the time I got the reminder email, it was too late.  Fortunately, the recording is now available.  If you have an interest [...]]]></description>
			<content:encoded><![CDATA[<p>I guess I missed the Zend PHP Framework webcast on Friday.  I was looking forward to it, but I signed up a while ago and forgot about it.  By the time I got the reminder email, it was too late.  Fortunately, the recording is <a href="http://www.phparch.com/webcasts/recordings/dec0205_zend.php">now available</a>.  If you have an interest in ZPF or frameworks in general, you should watch this.</p>
<p><a href="http://shiflett.org/archive/171">Chris Shiflet</a> and <a href="http://blog.phpdeveloper.org/?p=23">PHP Developer</a> both have coverage of the webcast.  The webcast even <a href="http://www.loudthinking.com/arc/000544.html">caught some attention</a> from the Rails camp.</p>
<p>I won&#8217;t try to summarize the webcast here, but instead offer a few impressions.</p>
<p>I found the webcast to be interesting, although it didn&#8217;t really answer the primary questions I have about the structure of the front controller and form processing.  ZActiveRecord, ZMail, and ZSearch are fine components, but my interest lies in the controllers because that is the area where there is the least consensus about the state of the art.  One red flag for me was the suggestion of putting business logic in actions.  Nothing but a high level overview was given of the controllers, but this perks my ears as an issue in <a href="http://www.phpwact.org/pattern/model_view_controller">MVC separation</a>.</p>
<p>The coding standards emphasize not reserving global resources.  The framework will not define functions or global constants, it uses <a href="http://www.procata.com/blog/archives/2004/05/24/exceptional-php/">exceptions</a> and doesn&#8217;t reserve __autoload for its own use.  This is very good.  On the other hand, it seems to rely on static methods quite a bit, which I think can burn you over the long run if you are trying to offer a componentized architecture and can make code more difficult to test.  I&#8217;ve been moving away from static methods as much as I can in my own code.  Eventually, I always seem to regret using them.  They lure you in at the beginning with the promise of simplicity and then they punish you later with their inflexibility.</p>
<p>I wonder how many of the components do their own &#8220;connection management&#8221; such as with the ZSearch::open (static methods again)?  This strikes me as an opportunity for a general dependency injection mechanism.  A technique that we are emphasizing more and more in WACT, but which I don&#8217;t think has reached widespread use in the PHP framework world.</p>
<p>One of the stated goals of the Zend Framework is to improve the PHP ecosystem.  The webcast suggests that Zend PHP Framework will play well with others, allowing you to use the components independently, or for example use a different templating system with the framework.  On the other hand, Andi suggested that all components will be distributed in their entirety.  When asked if a stripped down version could be distributed, the answer was &#8220;Why would you want to?&#8221;</p>
<p>I don&#8217;t think a monolithic distribution mechanism will play well with the new ecosystem of components that is rising up based on the PEAR installer&#8217;s new channel capability.  Eventually, the PEAR installer will move into the <a href="http://www.schlitt.info/applications/blog/index.php?/archives/388-Distributing-your-PHP-applications-with-PEAR.html">end user application installation</a> space.  To participate in this, ZPF should be available over a channel.  I think a key success factor for the Zend framework will be the release of individual components via a PEAR channel.</p>
<p>It is much better to be able to declare dependencies on individual packages, rather than on one huge bundle of components.  Monolithic distribution unnecessarily ties together the release schedules of packages that might otherwise have no common dependencies.  Micro-packages on a PEAR channel are the future of <a href="http://www.procata.com/blog/archives/2004/11/24/installing-web-applications/">PHP web application installation</a>.</p>
<p>Overall, I think Zend is taking a good approach to the development of ZPF.  I look forward to learning more.  </p>
<p><strong>Update</strong>: Just as writing tests is an important process element, because testable code is better code, I think that micro package releases are better than monolithic package releases from a process standpoint.  The mere act of writing the components so that they can be independently released highlights unhealthy dependencies.  This, of course, has to be tempered by an <a href="http://www.procata.com/blog/archives/2005/11/06/communicating-a-vision-with-open-source/">overall vision</a> and cross-package duplicate code elimination.  Two areas that have been challenges for PEAR with its political fiefdoms surrounding each package and one reason why <a href="http://www.procata.com/blog/archives/2005/12/01/the-rumors-of-pears-demise-are-greatly-exaggerated/">PEAR is not a framework</a>.</p>
<p>(P.S.  Hurry up and release ZSearch.  I want to use it.)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.procata.com/blog/archives/2005/12/05/zend-framework-webcast/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
	</channel>
</rss>
