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
|