单例模式的写法 --一段php代码的疑惑

jxlstc001 2011-10-20 06:37:52
最近看了两种单例模式的定义,分别是:
模式1 :

class DBUtil {

function &instance() {
static $object;
if(empty($object)) {
$object = new DBUtil();
}
return $object;
}

function DBUtil(){
echo "DBUtil";
}
}

$dbUtil = DBUtil::instance();


模式2:

class DBUtil2 {

private static $instance = null;

public static function getInstance() {
if (self::$instance == null) {
self::$instance = new DBUtil2();
}
return self::$instance;
}

function __construct(){
echo "DBUtil2";
}
}

$dbUtil2 = DBUtil2::getInstance();


第二种写法我还是理解的很清楚的,但是对于第一种写法,就有很多的问题:
第一:function &instance (){...}中的&意义何在?
第二:两个构造函数写法的取舍,一个为与类名称相同,一个为固定写法__constructor,个人觉得固定写法比较好
第三:php中类直接调用非静态方法是否流行,还是只是为了保持开源程序兼容更多php低版本的一种写法

个人感觉第一种单例模式的写法是为了php的向后兼容,保持开源程序被更多的应用
...全文
106 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuzuning 2011-10-21
  • 打赏
  • 举报
回复
模式1 的写法是 php4 的写法,但实例化的代码是错误的
应为
$dbUtil =& DBUtil::instance();
否则不能实现单例


总哈哈 2011-10-21
  • 打赏
  • 举报
回复
有点欠缺,文档里面就有一个完整的啊。好好看一下吧
ohmygirl 2011-10-21
  • 打赏
  • 举报
回复
第二种方式是单例么?

__construct()方法没有声明为private,可以多例的吧?

<?php
class DBUtil2 {

private static $instance = null;

public static function getInstance() {
if (self::$instance == null) {
self::$instance = new DBUtil2();
}
return self::$instance;
}

function __construct(){
echo "DBUtil2";
}
}

$a = new DBUtil2();
$b = new DBUtil2();
$c = new DBUtil2();
改一下昵称 2011-10-20
  • 打赏
  • 举报
回复
&instance() 这是对函数的返回值引用传递。我记得php5现在默认是对对象引用传递的,的确是为了向下兼容
jxlstc001 2011-10-20
  • 打赏
  • 举报
回复
哥顶...

21,887

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧