类 是对现实生活中一类具有共同特征的事物的抽象,通过类的实例化,产生了许多的对象,但同时也产生了大量资源的消耗(例如在连接 数据库 时连接数量的限制,又例如在计算机中打开 资源管理器 却具有唯一性),由此也产生了对类的实例化进行了限定的需求,为了保护资源的唯一性,由此产生了 单例模式 。
2.单例模式的定义
定义:单例模式singleton,是一种类的设计只会最多产生一个对象的设计思想。
3.单例模式的实例
a.创建一个空类 。
<?php
class Use{
}
$a=new Use();//实例化一个对象
?>b.能够多次实例化类,是产生多个对象的原因,所以可以通过私有化 构造方法 。
<?php
class Use{
private function __construct()
{
echo __FUNCTION__."<br>";
}
}
?>c.私有化 构造方法 使得实例化对象产生的数目为0,由此可以通过在类的内部,通过 静态方法 调用构造方法,然后将构造方法返回至外部。
<?php
class Use{
private function __construct()
{
echo __FUNCTION__."<br>";
}
public static function getInstance()
{
return new self();
}
}
$s1=Use::getSingleton();
?>d.通过上述的方法虽然能够实例化对象,但是同时也将构造方法的使用权限外放出去。如果想要该方法只返回一个对象,就得保证类内部有办法存着某个产生的对象,第一次产生新的,后面返回旧的。此时需要使用静态属性。
<?php
class Use{
private static $object = NULL;//初始化为NULL,没有对象
private function __construct()
{
echo __FUNCTION__."<br>";
}
public static function getInstance()
{
//判断类内部的静态属性是否存在对象
if(!(self::$object instanceof self)){ //当前保存的内容不是当前类的对象
self::$object = new self();
}
//返回对象给外部
return self::$object;
}
}
$s1=Use::getSingleton();
?>e.此时可以保证,通过调用 静态方法 只得到一个 对象 。但是依旧可以通过 克隆 ,不停的实例化新的对象,所以可以将 克隆 私有化。
<?php
class Use{
private static $object = NULL;//初始化为NULL,没有对象
private function __construct()
{
echo __FUNCTION__."<br>";
}
public static function getInstance()
{
//判断类内部的静态属性是否存在对象
if(!(self::$object instanceof self)){ //当前保存的内容不是当前类的对象
self::$object = new self();
}
//返回对象给外部
return self::$object;
}
private function __clone(){}
}
$s1=Use::getSingleton();
?>推荐:php教程
以上就是php中的单例模式的详细内容!
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did52620