+ -
当前位置:首页 → 问答吧 → 单例模式的写法 --一段php代码的疑惑

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

时间:2011-10-20

来源:互联网

最近看了两种单例模式的定义,分别是:
模式1 :
PHP code

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

$dbUtil = DBUtil::instance();



模式2:
PHP code

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的向后兼容,保持开源程序被更多的应用

作者: jxlstc001   发布时间: 2011-10-20

哥顶...

作者: jxlstc001   发布时间: 2011-10-20

&instance() 这是对函数的返回值引用传递。我记得php5现在默认是对对象引用传递的,的确是为了向下兼容

作者: dream1206   发布时间: 2011-10-20