Работа с экземпляром класса Singleton - PullRequest
0 голосов
/ 28 апреля 2011

Я создал одноэлементный класс в 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 () в классе singleton никогда не вызывается, как кажется. Также 'testend' в конце index.php никогда не вызывается.

Есть ли ошибка в моем синглтон-классе?

1 Ответ

1 голос
/ 28 апреля 2011

Код выглядит хорошо для меня, хотя я его не проверял. Однако я бы посоветовал вам создать приватный или защищенный (но не публичный) конструктор, поскольку вы хотите иметь возможность создавать экземпляр только внутри вашего класса (в DataManager::singleton())

...