为什么使用单例模式?
创建一个对象,只需实例化一次,就可以在项目内部任何位置使用。
如何创建单例模式?
私有化构造函数 private function __construct(){}。
上述代码功能:限制用户手动实例化,阻止 new className() 产生实例 。
static private $instance;
static function getInstance(){
if(!self::$instance){
self::$instance = new className();
}
return self::$instance;
}
上述代码功能:className::getInstance() 创建一个唯一实例。之前限制了 new className()方法,所以要创建一个静态方法,从内部实例化。
private function __clone(){}
上述代码功能: 将克隆方法私有化,防止用户克隆对象。
接下来上完整代码:
class lesson
{
private $name;//私有属性,用于测试
static private $instance;//用户绑定一个实例
private function __construct(){} //阻止 new lesson()
private function __clone(){} //阻止 克隆方法
//产生唯一实例
static public function getInstance()
{
if (!self::$instance) {
self::$instance = new lesson();
}
return self::$instance;
}
public function setName($name){
$this->name = $name;
}
public function getName(){
echo $this->name;
}
}
$a = lesson::getInstance();//创建一个实例
$a->setName('简书');//对实例的属性赋值
unset($a);//删除这个实例
$b = lesson::getInstance();//创建新实例
$b->getName(); //输出结果: 简书
说明实例只被实例化一次,并保存了第一次赋值的结果。
网友评论