CLICK HERE TO BUY IT TODAY! OR GET IT FREE VIA TRIALPAY  

PHP Demo Application - Source Code

/Framework/Model/DataObjects/Parameters/_Abstract.php

<?php
/**
* Script Contents: Apeel_Framework_Model_DataObjects_Parameters_Abstract Class
* @package Apeel_Framework_Model_DataObjects
*/

/**
* Abstract Parameter Base Class that provides functionality to allow 
* properties with a pre-defined set of valid values and to expand abbreviated
* values.  

* Concrete classes should define unrestricted parameters as public.  

* Restricted parameters should be defined as private, and a list of acceptable
* values defined in the getRestrictedParameterValues() method's array.  

* If any properties require it's'values to be expanded upon retrieval, details
* should be defined in the getSubstituteValues() method's array.  

* @package      Apeel_Framework_Model_DataObjects 
* @version      1.1.0
* @author       John W. King (email: contact@apeelframework.net)
* @copyright    City Business Logic Limited 2001-2011
* @license      Dual MIT / GNU Lesser General Public License Version 3
*/
abstract class Apeel_Framework_Model_DataObjects_Parameters_Abstract {

    
/**
    * Internal array of restricted parameters and their valid values.  
    * 
    * Set by the consturctor by reading the concrete classes 
    * getRestrictedParameterValues() method.  
    * 
    * @var array
    */
    
private $_properties;
    
    
    
/**
    * Constructor reads restricted parameter specifications from concrete class 
    * and stores in internal array
    * 
    * @return void
    */
    
public function __construct() {
        
$this->_properties $this->getRestrictedParameterValues();
    }
    
    
    
/**
    * Returns array of restricted parameters with their acceptable values.  
    * 
    * Used for parameters that can only be set to one of a specific set of
    * values.  
    * 
    * It should return an array in the format:
    * array('_myparam' => array('validoption1', 'validoption2', ...), 
    * '_anotherparam' => ...) 
    * or FALSE if no such parameters exist in the concrete class.  
    * 
    * @return array | boolean
    */
    
abstract protected function getRestrictedParameterValues();
    
    
    
/**
    * Returns array of expanded values to replace abbreviated stored values.  
    * 
    * Array should be in format:
    * array('_myparam' => array('a' => 'Apple', 'b' => 'Ball', ...
    * '_anotherparam' => ...) 
    * or FALSE if empty.  
    * 
    * Values are validated when stored, so we can assume value is valid even if 
    * no substitute value defined.  
    * 
    * @return array | boolean
    */
    
abstract protected function getSubstituteValues();    
    
    
    
/**
    * "Magic" Setter method - ensures that restricted parameters only hold
    * valid values.  
    * 
    * Throws an exception if the parameter name and/or the supplied value does 
    * not exist in the array returned by getRestrictedParameterValues().  
    * 
    * @param string $name
    * @param mixed $value
    * @return void
    */    
    
public function __set($name$value) {        
        if ((isset(
$this->_properties[$name])) && (property_exists($this$name))) {
            
$valid_options $this->_properties[$name];
            if (
in_array($value$valid_options)) {
                
$this->$name $value;
            } else {
                throw new 
Exception('[' $value '] is not a valid type - should be: ' implode(', '$valid_options));
            }
        } else {
            throw new 
Exception('Trying to set non-existant property [' $name ']');
        }
    }
    
    
    
/**
    * "Magic" Getter method - used to retrieve value of restricted parameters.
    * If subsitute value is defined then that is returned, otherwise a check 
    * is made for a default value and that is returned if it exists.  If no
    * substitute exist then the actual value is returned.  
    * 
    * @param string $name
    * @return mixed
    */
    
public function __get($name) {
        if (
property_exists($this$name)) {
            
$value $this->$name;
            
$substitutes $this->getSubstituteValues();
            if (
$substitutes) {
                if (isset(
$substitutes[$name][$value])) {                    
                    
$value $substitutes[$name][$value];
                } elseif (isset(
$substitutes[$name]['DEFAULT'])) {
                    
$value $substitutes[$name]['DEFAULT'];
                }
            }
            return 
$value;
        } else {
            throw new 
Exception('Trying to get non-existant property [' $name ']');
        }
    }
}

?>

PHP Demo Source Code Index