PHP里的单实例类在进行数据交换,节省内存上还是很有意义的。写个简单例子。
类1,单实例类本身:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
class UTIL { private static $instance ; public function get() { if (!self:: $instance ) { self:: $instance = new UTIL(); } return self:: $instance ; } public $number = 10; public function change( $num ) { $this ->number += $num ; } public function getNum() { return $this ->number; } } |
类2,使用前述单实例类的应用类:
1
2
3
4
5
6
7
8
9
10
11
12
|
class SINGLEA { private $numInst ; function __construct() { $this ->numInst = UTIL::get(); } public function change( $num ) { $this ->numInst->change( $num ); } public function getNum() { return $this ->numInst->getNum(); } } |
类3,同类2:
1
2
3
4
5
6
7
8
9
10
11
12
|
class SINGLEB { private $numInst ; function __construct() { $this ->numInst = UTIL::get(); } public function change( $num ) { $this ->numInst->change( $num ); } public function getNum() { return $this ->numInst->getNum(); } } |
最后是调用的地方:
1
2
3
4
5
6
7
8
|
$instA = new SINGLEA(); $instA ->change(100); var_dump( 'SINGLEA CHANGED: ' ); var_dump( $instA ->getNum()); $instB = new SINGLEB(); $instB ->change(-510); var_dump( 'SINGLEB CHANGED: ' ); var_dump( $instB ->getNum()); |
最后的显示结果:
1
2
3
4
|
string 'SINGLEA CHANGED: ' (length=17) int110 string 'SINGLEB CHANGED: ' (length=17) int-400 |