За последние 24 часа нас посетили 35616 программистов и 1629 роботов. Сейчас ищут 1024 программиста ...

Подключение к базе, с использованием паттерна register

Тема в разделе "PHP для новичков", создана пользователем Dimon2x, 13 ноя 2022.

  1. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.210
    Симпатии:
    186
    Правильно ли я использовал паттерн реестра?
    Сделал 2 запроса к базе, по логике основное подключение, должно происходить только 1 раз?
    Осталось доделать некоторые проверки и поместить подключение в контейнер.

    data.json

    Код (Text):
    1. {
    2.   "db" : "mysql",
    3.   "host" : "localhost",
    4.   "dbname" : "testdb",
    5.   "user" : "dimak",
    6.   "password" : "123456"
    7. }
    Registry.php

    PHP:
    1. <?php
    2.  
    3. class Registry {
    4.     private static ?Registry $instance = null;
    5.     private array $settings = [];
    6.     private ?\PDO $pdo = null;
    7.    
    8.     public static function instance()
    9.     {
    10.         if(is_null(self::$instance)){
    11.             self::$instance = new Self();
    12.         }
    13.        
    14.         return self::$instance;
    15.     }
    16.    
    17.     public function setConf($conf)
    18.     {
    19.         foreach($conf as $key => $value){
    20.             $this->settings[$key] = $value;  
    21.         }
    22.     }
    23.    
    24.     public function getConf()
    25.     {
    26.         return $this->settings;
    27.     }
    28.    
    29.     public function setPdo($data)
    30.     {
    31.         if (is_null($this->pdo)) {
    32.            
    33.             $db = $data['db'];
    34.             $host = $data['host'];
    35.             $dbname = $data['dbname'];
    36.             $login = $data['user'];
    37.             $password = $data['password'];
    38.            
    39.             $dsn = $db . ':host=' . $host . ';dbname=' . $dbname;
    40.                                
    41.             $this->pdo = new \PDO($dsn, $login, $password);
    42.             $this->pdo->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
    43.         }    
    44.     }
    45.    
    46.     public function getPdo(): \PDO
    47.     {
    48.          return $this->pdo;
    49.     }
    50.            
    51. }

    Runner.php

    PHP:
    1. <?php
    2.  
    3. class Runner {
    4.     public static function setUp()
    5.     {
    6.         $config = __DIR__ . "/data.json";
    7.         $configRead = file_get_contents($config);
    8.         $data = json_decode($configRead);
    9.        
    10.          $reg = Registry::instance();
    11.          $reg->setConf($data);
    12.          $reg->setPdo($reg->getConf());
    13.        
    14.          $connect = $reg->getPdo();
    15.        
    16.        
    17.         echo '<pre>';
    18.         print_r($connect->query("SELECT * FROM venue")->fetchAll());
    19.         echo '</pre>';
    20.        
    21.         echo '<pre>';
    22.         print_r($connect->query("SELECT * FROM users")->fetchAll());
    23.         echo '</pre>';
    24.     }
    25. }
    index.php

    PHP:
    1. <?php
    2.  
    3. declare(strict_types=1);
    4.  
    5. ini_set('display_errors', 'on');
    6.  
    7.  
    8. function myAutoload($class){
    9.       require __DIR__ . '/' . str_replace('\\', '/', $class) . '.php' ;
    10. }
    11.  
    12.   spl_autoload_register('myAutoload');
    13.  
    14. Runner::setUp();
     
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.810
    Симпатии:
    1.332
    Адрес:
    Лень
    Нет. Ты Реестр перефаршировал кодом под инструмент для работы с БД
     
  3. neste

    neste Новичок

    С нами с:
    26 июл 2021
    Сообщения:
    8
    Симпатии:
    0
    Не правильно - реестр не имеет никакого отношения к БД. Это просто хранилище сервисных классов, доступное в любой точке приложения, можно реализовать даже на простом массиве.