php设计模式之单例模式代码
php设计模式之单例模式的例子,供大家参考,具体内容如下
<?php
/**
*php设计模式单例模式
*/
classFruit{
privatestatic$instanceMap=array();
//protectedgetterforsingletoninstances
protectedstaticfunctiongetSingleton($className){
//保证单例模式并且不能从控制器实例化和克隆
if(!isset(self::$instanceMap[$className])){
$object=new$className;
//MakesurethisobjectinheritfromSingleton
if($objectinstanceofFruit){
self::$instanceMap[$className]=$object;
var_dump($object);
}else{
throwSingletonException("Class'$className'donotinheritfromSingleton!");
}
}
returnself::$instanceMap[$className];
}
//protectedconstructortopreventoutsideinstantiation
protectedfunction__construct(){}
//deniecloningofsingletonobjects
publicfinalfunction__clone(){
trigger_error('Itisimpossibletoclonesingleton',E_USER_ERROR);
}
}
classAppleextendsFruit{
protected$rndId;
publicfunction__construct(){
$this->rndId=rand();
}
publicfunctionwhatAmI(){
echo'IamaApple('.$this->rndId.')<br/>';
}
publicstaticfunctiongetInstance(){
//echoget_class();
returnFruit::getSingleton(get_class());
}
}
classGreenAppleextendsApple{
publicfunctionwhatAmI(){
echo'IamaGreenApple('.$this->rndId.')<br/>';
}
publicstaticfunctiongetInstance(){
returnFruit::getSingleton(get_class());
}
}
$apple1=Apple::getInstance();
//var_dump($apple1);
$apple2=GreenApple::getInstance();
$apple1->whatAmI();//shouldecho'IamaApple(somenumber)
$apple2->whatAmI();//shouldecho'IamaGreenApple(somenumber)
$apple1=Apple::getInstance();
$apple2=GreenApple::getInstance();
//保证单例模式
$apple1->whatAmI();//shouldecho'IamaApple(samenumberasabove)
$apple2->whatAmI();//shouldecho'IamaGreenApple(samenumberasabove)
//$a=clone$apple1;//thisshouldfail
//$b=clone$apple2;//thisshouldfail
以上就是本文的全部内容,希望对大家学习php程序设计有所帮助。