Whilst working on my AOP framework for PHP, I needed a versatile iterator. Here is what I came up with:
Friday, June 13, 2008
Design Pattern in PHP: Iterator Pattern
Thursday, June 12, 2008
Javascript for PHP developers: Part I: Static Class
Here is how I would code a static class in Javascript by borrowing from my PHP experience:
| Javascript | PHP |
Thursday, June 5, 2008
Design Pattern in PHP: Factory pattern
The factory pattern is most interesting when Testing and Refactoring because one can substitute a class implementation for another without changing the core code.
In the example below, I have demonstrated a versatile factory method which sports object instance creation with a variable parameter list.
- Base::factory( $className /*optional parameters*/ ) creates an object of class $className with, optionally, a list of parameters passed to the constructor
- E.g. $object = Base::factory( 'TestClass', 'param1', 'param2' );
- Base::mapClass( $sourceClassName, $targetClassName ) adds a mapping entry so that the factory builds an object instance of $targetClassName instead of $sourceClassName when asked to build for $sourceClassName
- E.g. Base::mapClass( 'TestClass', 'TestDebugClass' );
Project
The project is located at GoogleCode.
Tuesday, June 3, 2008
Design Pattern in PHP: Template Method
This next design pattern should not be mistaken with the common template conception (see Web template) more commonly found in web-technologies.
The template method pattern is designed with a base class which contains an high-level recipe and relies on sub-classes to specify the ingredients. An example would be a template for publishing a table of objects: the template method base class would implement the publishing logic whilst the sub-class would extract the relevant data pieces to expose in the table.
Project
The project is located at GoogleCode.
Friday, May 30, 2008
Using Yahoo! Pipes with WEB-Services
I recently struggled a bit with Yahoo! Pipes when playing with this great tool trying to form a properly updating RSS feed from a WEB-Service source. The WEB-Service in question is available through one of Ohloh's API : Project.
The issue was related to the <guid> field required by (most?) RSS Aggregators (I use the excellent GoogleReader): fetching a data feed from a WEB-Service API usually means that no "proper" feed is in place and an RSS item must be created on-the-fly. This is no problem as such but when the RSS aggregator comes fetching updates, the <guid> field isn't updated dynamically by Yahoo! Pipes.
Part of the solution comes from using a mostly undocumented feature of Pipes: the y:id.value item tag.
After fetching the data from the data source, copy a field that can serve as good <guid> into the y:id.value field. In the example above, I used the updated_at field which, of course, isn't a <guid> per-se by not being global ; I'll find a better way next time around.
Finally, before connecting the "pipe output", insert the y:id.value in the pipes results as shown above.
For the interested, here is the pipe's address: Ohloh Project Summary as well as a link to all my pipes.
Have fun with Pipes... I know I do!