1: <?php
2: namespace codemania\core;
3: /**
4: * CodeMania Framework
5: *
6: * @author CodeMania Team <team@codemania.ru>
7: * @license http://codemania.ru/license.html
8: * @package CodeMania
9: * @version 1.0.0
10: * @copyright (c) 2014, CodeMania Team
11: * @link http://codemania.ru/
12: */
13: defined('CM_ROOT') or exit('Заперт доступа!');
14: /**
15: * Singelton
16: *
17: * @author CodeMania Team <team@codemania.ru>
18: * @license http://codemania.ru/license.html
19: * @package CodeMania
20: * @version 1.0.0
21: * @copyright (c) 2014, CodeMania Team
22: * @link http://guide.codemania.ru/class_Singelton.html
23: */
24: abstract class Singleton {
25: /**
26: * Обьект наследуемого класса
27: */
28: static protected $_instance = false;
29: /**
30: * Возвращает обьект наследуемого класса
31: */
32: static public function instance() {
33: // В PHP версии ниже 5.3.0 работать не будет
34: Core::check_php_version('5.3.0');
35: // Если Singelton еще не был обьявлен
36: if (self::$_instance === false) {
37: // Передаем имя дочернего класса в переменную
38: $instance_class = get_called_class();
39: // Передаем обьект доернего класса
40: self::$_instance = new $instance_class();
41: }
42: // Передаем обьект класса
43: return self::$_instance;
44: }
45: /**
46: * Запрещает клонировать Singelton
47: * @throws \LogicException
48: */
49: public final function __clone() {
50: // Вызов функции выбрасывает исключение
51: throw new \LogicException('Невозможно клонировать Singelton!');
52: }
53: }