处理Singleton类实例

时间:2011-04-28 15:46:47

标签: php oop singleton echo data-management

我在PHP中创建了一个单例类:

<?php
class DataManager
{
    private static $dm;

    // The singleton method
    public static function singleton()
    {
        if (!isset(self::$dm)) {
            $c = __CLASS__;
            self::$dm = new $c;
        }

        return self::$dm;
    }

    // Prevent users to clone the instance
    public function __clone()
    {
        trigger_error('Clone is not allowed.', E_USER_ERROR);
    }
    public function test(){
        print('testsingle');
        echo 'testsingle2';
   }

    function __get($prop) {
        return $this->$prop;
    }

    function __set($prop, $val) {
        $this->$prop = $val;
    }
}
?>

现在当我尝试在index.php中使用这个类时:

<?php
include('Account/DataManager.php');

echo 'test';
$dm = DataManager::singleton();
$dm->test();

echo 'testend';
?>

我得到的唯一回声是'test',单例类中的函数test()从未被调用过。此外,index.php末尾的'testend'从未被调用过。

我的单身人士课程中是否有错误?

1 个答案:

答案 0 :(得分:1)

代码看起来很好,虽然我还没有测试过。但是我建议你创建一个私有或受保护(但不是公共)的构造函数,因为你只想在类中创建一个实例(在DataManager::singleton()中)