1、单例模式
这种模式
1 class Font 2 { 3 /*静态化全局实例 4 *并且私有化防止调用*/ 5 static private $_instance=NULL; 6 7 private function __construct(){ 8 9 } 10 11 private function __clone(){ 12 13 } 14 static public function getInstance(){ 15 if(is_null(self::$_instance)||!isset(self::$_instance)){ 16 self::$_instance=new self(); 17 } 18 return self::$_instance; 19 } 20 21 public function somefunction(){ 22 echo 'yes'; 23 } 24 } 25
引用
1 <?php 2 // 3 $fonter=Font::getInstance(); 4 $fonter->somefunction(); 5 //显示‘yes’成功 6 7 8 ?>
在网上搜罗一些关于单例模式优缺点的说明,先放着。
【单例模式的优点】
1、对唯一实例的受控访问
2、缩小命名空间 单例模式是对全局变量的一种改进。它避免了那些存储唯一实例的全局变量污染命名空间
3、允许对操作和表示的精华 单例类可以有子类。而且用这个扩展类的实例来配置一个应用是很容易的。你可以用你所需要的类的实例在运行时刻配置应用。
4、允许可变数目的实例(多例模式)
5、比类操作更灵活
适用场合:
1、当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时
2、当这个唯一实例应该是通过子类化可扩展的。并且用户应该无需更改代码就能使用一个扩展的实例时。
使用场合:一般都在某个程序入口,例如zf的font用它。应用程序与数据库打交道的应用场景,所以一个应用中会存在大量的数据库操作,比如过数据库句柄来连接数据库这一行为,使用单例模式可以避免大量的new操作,因为每一次new操作都会消耗内存资源和系统资源。
缺点:在PHP中,所有的变量无论是全局变量还是类的静态成员,都是页面级的,每次页面被执行时,都会重新建立新的对象,都会在页面执行完毕后被清空,这样似乎PHP单例模式就没有什么意义了,所以PHP单例模式只是针对单次页面级请求时出现多个应用场景并需要共享同一对象资源时是非常有意义的。