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程序设计有所帮助。