Panda PHP Components

Search

Archives

Categories

Posts Tagged ‘php’

The Configurable Interface

Monday, August 4th, 2008

Oftentimes you need to configure an object quickly. Generally, the API offers a series of mutator methods which allow for changing properties within the instance. Where this becomes problematic, is when you have several instances to manage with similar or identical configurations.

An ideal implementation would look something like this:

$configuration = array(
    'foo' => 123,
    'bar' => true
);

$one = new Thing;
$one->configure($configuration);

$two = new Thing;
$two->configure($configuration);

Panda_Configurable_Interface offers a standardized solution: Simply implement the interface and add a configure() method to your class.

A Quick Example

The interface has a single requirement: the configure() method:

public function configure(array $configuration = array());

As you can see, your implementation will need to accept an array as its only parameter. The idea is that the configuration array would contain name and value pairs representing configuration directives (although it could really contain anything) for your class.

Here’s an example from the recently updated Panda_Loader_Abstract class:

public function configure(array $configuration = array())
{
    if (array_key_exists('namespace', $configuration)) {
        $this->setNamespace($configuration['namespace']);
    }

    if (array_key_exists('baseDir', $configuration)) {
        $this->setBaseDir($configuration['baseDir']);
    }

    if (array_key_exists('load', $configuration)) {
        if (is_string($configuration['load'])) {
            $this->load($configuration['load']);
        }
        elseif (is_array($configuration['load'])) {
            foreach ($configuration['load'] as $className) {
                $this->load($className);
            }
        }
    }
}

And on the front, it looks like this:

$Loader = My_Loader::singleton();
$Loader->configure(array(
	'baseDir' => realpath('../lib'),
	'namespace' => 'Blog',
	'load' => array(
		'FrontController',
		'Request',
		'Route',
		'Controller',
		'Model',
		'View'
	)
));

Coming up next: Views

Tuesday, April 22nd, 2008

I’ve been exploring MVC framework development on my personal blog in a series of posts called Rolling Your Own MVC. At the time of this writing, I’m wrapping up the code for my view library which will be immediately rolled into the next update.

As always, an interface and an abstract class is provided but several concrete classes are provided. They are:

  • Panda_View_Interface
  • Panda_View_Abstract
  • Panda_View_PHP
  • Panda_View_JSON
  • Panda_View_XML
  • Panda_View_HTML
Code and unit tests will be uploaded later this week!

Panda PHP is free software distributed under the New BSD license. All content of this website is copyright © 2007 Panda PHP.