<?php
/**
*@name singleton.php
*@desc 單件模式
*/
//單件模式是我們在開發中經常用到的一種設計模式,利用PHP5面向對象的特性,
//我們可以很容易的構建單件模式的應用,下面是單件模式在PHP中的幾種實現方法
class Stat{
static $instance = NULL;
static function getInstance(){
if(self::$instance == NULL){
self::$instance = new Stat();
}
return self::$instance;
}
private function __construct(){
}
private function __clone(){
}
function sayHi(){
return "The Class is saying hi to u ";
}
}
echo Stat::getInstance()->sayHi();
//這是一種最通常的方式,在一個getInstance方法中返回唯一的類實例。
//對這裡例子稍加修改,便可以產生一個通用的方法,
//只要叫道任何你想用到單件的類裡,就可以了。
class Teacher{
function sayHi(){
return "The teacher smiling and said 'Hello '";
}
static function getInstance(){
static $instance;
if(!isset($instance)){
$c = __CLASS__;
$instance = new $c;
}
return $instance;
}
}
echo Teacher::getInstance()->sayHi();
//最後一種是提供一個singleton類,然後通過調用getInstance方法,
//可以為任何一個類生產出一個實例來。
class singleton{
function getInstance($class){
static $instances = array();
if(!array_key_exists($class,$instances)){
$instances[$class] = &new $class;
}
$instance = $instances[$class];
return $instance;
}
}
class People{
function sayHi(){
return 'Hello i am a people?';
}
}
echo "<br />";
echo singleton::getInstance('People')->sayHi();
//通過這三種方法,我們可以很容易的應用單件模式,
//如果能夠結合工廠模式,將使我們的編程變得更有條理和效率。
//示例:
class test_class{
function test_class(){
/******code******/
}
function test(){
/******code******/
}
function &getInstance(){
static $instance = null;
if(is_null($instance)){
$instance = new test_class();
}
return $instance;
}
}
$test_class =& test_class::getInstance();
?>