1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
<?php /** * php设计模式 单例模式 */ class Fruit{ private static $instanceMap = array (); //protected getter for singleton instances protected static function getSingleton( $className ){ //保证单例模式 并且不能从控制器实例化和克隆 if (!isset(self:: $instanceMap [ $className ])) { $object = new $className ; //Make sure this object inherit from Singleton if ( $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 instantiation protected function __construct(){} //denie cloning of singleton objects public 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程序设计有所帮助。