PHP 实现单件(singleton)模式
时间:2010-07-21
来源:互联网
单例模式(singleton)也叫单件模式。使用它的目的是为了确保某个类只有一个实例。
因为它的实现方式很简单,所以多数模式书籍都把单例模式作 为入门模式来介绍,
可以说对很多模式爱好者来说,单例模式是他们最熟悉的设计模式。比如,ZendFramework 前端控制器也是单例的。
注意:
1,正常的单例模式应该设置一个私有化的__construct,防止用户使用 new 进行实例化。
2,再覆盖一个 __clone() 方法以限制 __clone 的行为。
<?php
class MyClass
{
private static $instance = NULL;
private $str;
private $num;
public function get_instance($s, $n)
{
if(!self::$instance instanceof self)
{
self::$instance = new self($s, $n);
return self::$instance;
}
else
{
echo 'Error: more than one instance @Class: MyClass';
}
}
private function __construct($s, $n)
{
echo 'this is __construct().';
$this->str = $s;
$this->num = $n;
}
public function method1()
{
echo 'this is method1().';
}
//覆盖__clone()方法,限制克隆
private function __clone()
{
}
}
/*
因为构造方法是 private(私有)的,所以是不能直接 new 实例化的,
必须使用下面的方法:MyClass::get_instance();
*/
$obj = MyClass::get_instance(1, 2);
$obj->method1();
//再次取得实例时,就会报错,实例化失败
$obj = MyClass::get_instance();
//$obj1 = new MyClass();
?>
作者:张庆(网眼) 西安 PHP 教育培训中心 2010-7-20
来自“网眼视界”:http://blog.why100000.com
作者微博:http://t.qq.com/zhangking
“十万个为什么”电脑学习网:http://www.why100000.com
因为它的实现方式很简单,所以多数模式书籍都把单例模式作 为入门模式来介绍,
可以说对很多模式爱好者来说,单例模式是他们最熟悉的设计模式。比如,ZendFramework 前端控制器也是单例的。
注意:
1,正常的单例模式应该设置一个私有化的__construct,防止用户使用 new 进行实例化。
2,再覆盖一个 __clone() 方法以限制 __clone 的行为。
<?php
class MyClass
{
private static $instance = NULL;
private $str;
private $num;
public function get_instance($s, $n)
{
if(!self::$instance instanceof self)
{
self::$instance = new self($s, $n);
return self::$instance;
}
else
{
echo 'Error: more than one instance @Class: MyClass';
}
}
private function __construct($s, $n)
{
echo 'this is __construct().';
$this->str = $s;
$this->num = $n;
}
public function method1()
{
echo 'this is method1().';
}
//覆盖__clone()方法,限制克隆
private function __clone()
{
}
}
/*
因为构造方法是 private(私有)的,所以是不能直接 new 实例化的,
必须使用下面的方法:MyClass::get_instance();
*/
$obj = MyClass::get_instance(1, 2);
$obj->method1();
//再次取得实例时,就会报错,实例化失败
$obj = MyClass::get_instance();
//$obj1 = new MyClass();
?>
作者:张庆(网眼) 西安 PHP 教育培训中心 2010-7-20
来自“网眼视界”:http://blog.why100000.com
作者微博:http://t.qq.com/zhangking
“十万个为什么”电脑学习网:http://www.why100000.com
作者: 西安PHPer 发布时间: 2010-07-21

作者: 温柔的大海 发布时间: 2010-07-21
回复 温柔的大海
这是广告,没看出来么,而且是很没水平的广告
这是广告,没看出来么,而且是很没水平的广告
作者: 四不象 发布时间: 2010-07-21
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28