Welcome 微信登录

首页 / 网页编程 / PHP / php设计模式之单例模式代码

php设计模式之单例模式的例子,供大家参考,具体内容如下
<?php/** * php设计模式 单例模式 */class Fruit{private static $instanceMap = array();//protected getter for singleton instancesprotected static function getSingleton($className){//保证单例模式 并且不能从控制器实例化和克隆if (!isset(self::$instanceMap[$className])) {$object = new $className;//Make sure this object inherit from Singletonif ($object instanceof Fruit) {self::$instanceMap[$className] = $object;var_dump($object);} else {throw SingletonException("Class "$className" do not inherit from Singleton!");}}return self::$instanceMap[$className];}//protected constructor to prevent outside instantiationprotected function __construct(){}//denie cloning of singleton objectspublic final function __clone(){trigger_error("It is impossible to clone singleton", E_USER_ERROR);}}class Apple extends Fruit{protected $rndId;public function __construct(){$this->rndId = rand();}public function whatAmI(){echo "I am a Apple(" . $this->rndId . ")<br />";}public static function getInstance(){//echo get_class();return Fruit::getSingleton(get_class());}}class GreenApple extends Apple{public function whatAmI(){echo "I am a GreenApple(" . $this->rndId . ")<br />";}public static function getInstance(){return Fruit::getSingleton(get_class());}}$apple1 = Apple::getInstance();//var_dump($apple1);$apple2 = GreenApple::getInstance();$apple1->whatAmI();// should echo "I am a Apple(some number)$apple2->whatAmI();// should echo "I am a GreenApple(some number)$apple1 = Apple::getInstance();$apple2 = GreenApple::getInstance();//保证单例模式$apple1->whatAmI();// should echo "I am a Apple(same number as above)$apple2->whatAmI();// should echo "I am a GreenApple(same number as above)// $a = clone $apple1;// this should fail// $b = clone $apple2;// this should fail
以上就是本文的全部内容,希望对大家学习php程序设计有所帮助。