单例即单个对象,一次只能生产一个对象,代码如下
class Single{ // 定义一个类
static private $instance=null; // 声明一个静态属性,因为静态属性的数据具有长期性 且仅能为类所调用 所以这个静态属性用来保存对象。
//同时 为了防止在代码外面直接通过Single::$instance 赋值改变单例的属性 使其能产生多个对象,所以要对这个静态属性进行private化 不能在任何地方访问
private function __construct(){ // 私有化构造方法,使之不能$obj=new single()这种传统的生产对象方式来生产对象,只能通过下面的静态方法使用类名调用生产对象的方式来创建对象。
}
static function getObject(){ // 声明一个函数 并且进行静态化 使之只能用类名调用
if(self::$instance==null){ // 如果不存在对象
$obj=new self(); //则生产出一个对象,self是指当前类 自己
self::$instance = $obj; // 将生产出的对象赋值给静态属性,使之保存起来以待下次使用
return $obj; //返回对象
}else{ //否则
return self::$instance; // 静态属性$instance不为空则是已经存在对象,则可以直接返回,因为里面有对象
}
}
}
// 使用下面的创建对象语法能发现,所有创建的对象都是同一个对象。
$o1=Single::getObject();
$o2=Single::getObject();
$o3=Single::getObject();
var_dump($o1);
var_dump($o2);
var_dump($o3);
代码可以直接copy运行