Home arrow PHP arrow Page 2 - PHP Composite View Design Pattern: Introducing the Key Concepts

Defining an abstract composite view class - PHP

The Composite View design pattern offers users the versatility of handling single objects and collections through the same interface. But some programmers hesitate to use it due to its tricky implementation. Hesitate no longer; this multi-part series will take you step by step through some of the best ways to use the Composite View design pattern, complete with code samples to show you the way.

TABLE OF CONTENTS:
  1. PHP Composite View Design Pattern: Introducing the Key Concepts
  2. Defining an abstract composite view class
  3. Defining methods for adding and removing views
  4. Finish sample class: add a method for rendering view templates
By: Alejandro Gervasio
Rating: starstarstarstarstar / 3
August 17, 2010

print this article
SEARCH DEV SHED

TOOLS YOU CAN USE

advertisement

As the old proverb says, a long walk always begins with a single step. In keeping with this idea, the first thing I’m going to do to implement the Composite View pattern will be to build an abstract parent class. This class will encapsulate the functionality and structure of generic view objects. Later on, refined implementations of this parent will be responsible for handling one and multiple view objects through the same interface.

With that said, here’s how this abstract parent looks in its initial stage: 

(AbstractView.php)


abstract class AbstractView
{
    protected $_template = 'default.php';
    protected $_properties = array();

    // constructor
    public function __construct($template = '', array $data = array())
    {
        if ($template !== '') {
            $this->setTemplate($template);
        }
        if (!empty($data)) {
            foreach ($data as $name => $value) {
                $this->$name = $value;
            }
        }
    }
   
    // set a new view template
    public function setTemplate($template)
    {
        $template = $template . '.php';
        if (!file_exists($template)) {
            throw new ViewException('The specified view template does not exist.');  
        }
        $this->_template = $template;
    }
     
    // get the view template
    public function getTemplate()
    {
        return $this->_template;
    }
     
    // set a new property for the view
    public function __set($name, $value)
    {
        $this->_properties[$name] = $value;
    }

    // get the specified property from the view
    public function __get($name)
    {
        if (!isset($this->_properties[$name])) {
            throw new ViewException('The requested property is not valid for this view.');     
        }
        return $this->_properties[$name];
    }

    // remove the specified property from the view
    public function __unset($name)
    {
        if (isset($this->_properties[$name])) {
            unset($this->_properties[$name]);
        }
    }
}

 

(ViewException.php)


<?php

class ViewException extends Exception{}

As you can see, the above “AbstractView” class is quite easy to follow. It simply implements the magic “__set()” and “__get()” PHP methods to add and fetch undeclared view properties dynamically, which are stored in a protected array for further processing. The class also defines a mutator and an accessor for its “$_template” property, which can be used for handling the template file that the view class is going to render.

While this abstract parent is currently pretty functional, it still isn’t capable of manipulating single and multiple views via the same interface, in accordance with the commandments imposed by the Composite pattern. So it’s time to provide the class with this ability. We'll achieve this by defining a couple of abstract methods.

The signatures of these methods will be shown in the following segment, so click on the link below and keep reading. 



 
 
>>> More PHP Articles          >>> More By Alejandro Gervasio
 

blog comments powered by Disqus
escort Bursa Bursa escort Antalya eskort
   

PHP ARTICLES

- Hackers Compromise PHP Sites to Launch Attac...
- Red Hat, Zend Form OpenShift PaaS Alliance
- PHP IDE News
- BCD, Zend Extend PHP Partnership
- PHP FAQ Highlight
- PHP Creator Didn't Set Out to Create a Langu...
- PHP Trends Revealed in Zend Study
- PHP: Best Methods for Running Scheduled Jobs
- PHP Array Functions: array_change_key_case
- PHP array_combine Function
- PHP array_chunk Function
- PHP Closures as View Helpers: Lazy-Loading F...
- Using PHP Closures as View Helpers
- PHP File and Operating System Program Execut...
- PHP: Effects of Wrapping Code in Class Const...

Developer Shed Affiliates

 


Dev Shed Tutorial Topics: