Source for file Singleton.php

Documentation is available at Singleton.php

  1. <?php
  2. /**
  3.  *    LAIKA FRAMEWORK Release Notes:
  4.  *
  5.  *    @filesource     Singleton.php
  6.  *
  7.  *    @version        0.1.0b
  8.  *    @package        Laika
  9.  *    @subpackage     core
  10.  *    @category       abstract
  11.  *    @date           2011-05-21 18:28:12 -0400 (Sat, 21 May 2011)
  12.  *
  13.  *    @author         Leonard M. Witzel <witzel@post.harvard.edu>
  14.  *    @copyright      Copyright (c) 2011  Laika Soft <{@link http://oafbot.com}>
  15.  *
  16.  */
  17.  /**
  18.   * Abstract Laika_Singleton class.
  19.   * 
  20.   * Base class for all objects employing the Singleton pattern.
  21.   *
  22.   * @abstract
  23.   * @extends Laika
  24.   */
  25.  abstract class Laika_Singleton extends Laika{
  26.  
  27. //-------------------------------------------------------------------
  28. //    PROPERTIES
  29. //-------------------------------------------------------------------    
  30.     /**
  31.      * instance
  32.      * 
  33.      * @var    object 
  34.      * @access private
  35.      * @static
  36.      */
  37.     private static $instance;
  38.     
  39. //-------------------------------------------------------------------
  40. //    CONSTRUCTOR
  41. //------------------------------------------------------------------- 
  42.     /**
  43.      * __construct function.
  44.      * 
  45.      * @access private
  46.      * @final
  47.      * @return void 
  48.      */
  49.     private final function __construct(){}
  50.  
  51.     /**
  52.      * init function.
  53.      * 
  54.      * @access public
  55.      * @static
  56.      * @return void 
  57.      */
  58.     public static function init(){
  59.         $called_class get_called_class();
  60.         if!($called_class::$instance instanceof $called_class) ) 
  61.             $called_class::$instance new $called_class();        
  62.         return $called_class::$instance;
  63.     }
  64.     
  65.     /**
  66.      * __clone function.
  67.      * 
  68.      * @access private
  69.      * @final
  70.      * @return void 
  71.      */
  72.     private final function __clone(){}
  73.  
  74.  
  75. //-------------------------------------------------------------------
  76. //    SETTER & GETTER METHODS
  77. //-------------------------------------------------------------------
  78.  
  79.     /**
  80.      * get function.
  81.      * 
  82.      * @access public
  83.      * @static
  84.      * @param  mixed $property 
  85.      * @return mixed 
  86.      */
  87.     public static function get($property){        
  88.         $class get_called_class();
  89.         return $class::init()->$property;
  90.     }
  91.  
  92.     /**
  93.      * set function.
  94.      * 
  95.      * @access public
  96.      * @static
  97.      * @param  mixed $property 
  98.      * @param  mixed $value 
  99.      * @return void 
  100.      */
  101.     public static function set($property,$value){
  102.         $class get_called_class();
  103.         $class::init()->$property $value;    
  104.     }
  105.  
  106.  
  107.     /**
  108.      * __call function.
  109.      * 
  110.      * @access public
  111.      * @param mixed $name 
  112.      * @param mixed $arg 
  113.      * @return void 
  114.      */
  115.     public function __call($name,$arg){        
  116.         $class get_called_class();
  117.         if(!empty($arg))            
  118.             $class::init()->$name $arg[0];
  119.         else return $class::init()->$name;
  120.     }
  121.       
  122. //-------------------------------------------------------------------
  123. //    ARRAY CONVERSION
  124. //-------------------------------------------------------------------
  125.  
  126.     /**
  127.      * from_array function.
  128.      * 
  129.      * Returns an instance of an object constructed from an array
  130.      *
  131.      * @access public
  132.      * @static
  133.      * @param  mixed  $array 
  134.      * @return object 
  135.      */
  136.     public static function from_array($array){
  137.         $class get_called_class();
  138.         $object $class::init();
  139.         $properties get_object_vars($object);
  140.         foreach($array as $key => $value)
  141.             if(array_key_exists($key,$properties))
  142.                 $object->$key $value;
  143.         return $object;
  144.     }
  145.     
  146.     /**
  147.      * to_array function.
  148.      *
  149.      * Returns an array from an object
  150.      * 
  151.      * @access public
  152.      * @static
  153.      * @return array 
  154.      */
  155.     public function to_array(){
  156.         $array get_object_vars($this);
  157.         unset($array['instance']);
  158.         return $array;
  159.     }
  160.     
  161.     public function switch_instance($object){
  162.         $called_class get_called_class();
  163.         $called_class::$instance $object::$instance;
  164.     }
  165.     
  166.     
  167. //-------------------------------------------------------------------
  168. //    SERIALIZE & UNSERIALIZE METHODS
  169. //-------------------------------------------------------------------
  170.     /**
  171.      * serialize_me function.
  172.      * 
  173.      * @access public
  174.      * @static
  175.      * @return void 
  176.      */
  177.     public static function serialize_me(){
  178.         $called_class get_called_class();
  179.         $_SESSION[$called_classurlencode(serialize($called_class::$instance));
  180.     }
  181.     
  182.     /**
  183.      * unserialize_me function.
  184.      * 
  185.      * @access public
  186.      * @static
  187.      * @return object 
  188.      */
  189.     public static function unserialize_me(){
  190.         $called_class get_called_class();
  191.         $called_class::$instance new $called_class();
  192.         $called_class::$instance unserialize(urldecode($_SESSION[$called_class]));
  193.         return $called_class::$instance;
  194.     }
  195.  
  196.  
  197. //-------------------------------------------------------------------
  198. //    DESTRUCTOR
  199. //-------------------------------------------------------------------
  200.     
  201.     /**
  202.      * __destruct function.
  203.      * 
  204.      * @access public
  205.      * @return void 
  206.      */
  207. /*
  208.     public function __destruct(){
  209.         $called_class = get_called_class();
  210.         $called_class::$instance = NULL;
  211.     }
  212. */
  213.     
  214.     /**
  215.      * destroy function.
  216.      * 
  217.      * @access public
  218.      * @return void 
  219.      */
  220. /*
  221.     public function destroy(){
  222.         $called_class = get_called_class();
  223.         $called_class::$instance = NULL;            
  224.     }
  225. */
  226.               
  227.  }

Documentation generated on Sat, 19 May 2012 02:17:03 -0400 by phpDocumentor 1.4.4