Я хотел бы начать с показа теста: class A { public static $instance=null; public function __construct(){ self::$instance=$this; } public function className(){ return get_class(self::$instance); } } class B extends A { public function className(){ return get_class(self::$instance); } } // test code $b=new B(); echo $b->className; // B $a=new A(); echo $a->className; // A echo $b->className; // […]
Это базовый веб-сайт. Основываясь на ответах здесь, я делаю это: private $db; public function __construct($id = null) { $this->db = Db::getInstance(); //singleton from the Db class Но если есть статический метод, я не могу использовать переменную объекта. Есть ли что-то лучше, чем вручную указывать переменную db внутри статического метода? public static function someFunction($theID){ $db = […]
Я работаю над созданием фреймворка PHP, который ведет себя в соответствии с принципами MVC и использует инъекцию зависимостей. Я думаю, что у меня есть блок переднего контроллера; существует рабочий маршрутизатор, который создает экземпляр контроллера и вызывает соответствующее действие на основе запрошенного URI. Далее – инъекция зависимостей. Я хочу реализовать контейнер, который разрешает зависимости с помощью […]
Я пытаюсь установить соединение с базой данных с PDO и классом Singleton, но у вас проблемы с получением данных из базы данных. Я читал об этом, но я все еще не уверен, как назвать класс Singelton в моем файле базы данных из другого файла и получить результаты распечатки. Ошибка, которую я получаю прямо сейчас, – […]
с http://www.php.net/manual/en/class.pdo.php ###### config.ini ###### db_driver=mysql db_user=root db_password=924892xp [dsn] host=localhost port=3306 dbname=localhost [db_options] PDO::MYSQL_ATTR_INIT_COMMAND=set names utf8 [db_attributes] ATTR_ERRMODE=ERRMODE_EXCEPTION ############ <?php class Database { private static $link = null ; private static function getLink ( ) { if ( self :: $link ) { return self :: $link ; } $ini = _BASE_DIR . "config.ini" ; […]
Я работаю в рамках веб-приложения, а часть его состоит из нескольких сервисов, которые реализованы как одиночные. Все они расширяют класс Service, где выполняется однопользовательское поведение, выглядя примерно так: class Service { protected static $instance; public function Service() { if (isset(self::$instance)) { throw new Exception('Please use Service::getInstance.'); } } public static function &getInstance() { if (empty(self::$instance)) […]
Я заметил странное поведение с синглотами в PHP, нет лучшего способа объяснить это, но с примером. Предположим, у меня есть следующий одноэлементный класс: class Singleton { protected function __construct() { // Deny direct instantion! } protected function __clone() { // Deny cloning! } public static function &Instance() { static $Instance; echo 'Class Echo'.PHP_EOL; var_dump($Instance); if […]
Из класса php singleton ниже <?php class Singleton { /** * @var Singleton The reference to *Singleton* instance of this class */ private static $instance; /** * Returns the *Singleton* instance of this class. * * @return Singleton The *Singleton* instance. */ public static function getInstance() { if (null === static::$instance) { static::$instance = new […]
Если вы ищете причины, почему статические методы являются плохими, первое, что вы обнаружите, это потому, что вы не можете переопределить его, когда вы тестируете устройство. Так это все еще верно, учитывая, что в PHP 5.3 вы можете делать все, что хотите, с введением static:: ? Добавить: http://sebastian-bergmann.de/archives/883-Stubbing-and-Mocking-Static-Methods.html Обратите внимание, что он объясняет, как использовать синглтон […]
я работаю над веб-приложением на PHP, которое требует от пользователей регистрации и входа в систему со своими учетными данными. Тем не менее, я использую singleton шаблон во всех моих файлах PHP-файлов. У меня что-то беспокоит мой разум, который я хотел бы уточнить. Например, когда приложение запускается в прямом эфире, и одновременно у нас есть несколько […]