Правильно ли я использовал паттерн реестра? Сделал 2 запроса к базе, по логике основное подключение, должно происходить только 1 раз? Осталось доделать некоторые проверки и поместить подключение в контейнер. data.json Код (Text): { "db" : "mysql", "host" : "localhost", "dbname" : "testdb", "user" : "dimak", "password" : "123456" } Registry.php PHP: <?php class Registry { private static ?Registry $instance = null; private array $settings = []; private ?\PDO $pdo = null; public static function instance() { if(is_null(self::$instance)){ self::$instance = new Self(); } return self::$instance; } public function setConf($conf) { foreach($conf as $key => $value){ $this->settings[$key] = $value; } } public function getConf() { return $this->settings; } public function setPdo($data) { if (is_null($this->pdo)) { $db = $data['db']; $host = $data['host']; $dbname = $data['dbname']; $login = $data['user']; $password = $data['password']; $dsn = $db . ':host=' . $host . ';dbname=' . $dbname; $this->pdo = new \PDO($dsn, $login, $password); $this->pdo->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION); } } public function getPdo(): \PDO { return $this->pdo; } } Runner.php PHP: <?php class Runner { public static function setUp() { $config = __DIR__ . "/data.json"; $configRead = file_get_contents($config); $data = json_decode($configRead); $reg = Registry::instance(); $reg->setConf($data); $reg->setPdo($reg->getConf()); $connect = $reg->getPdo(); echo '<pre>'; print_r($connect->query("SELECT * FROM venue")->fetchAll()); echo '</pre>'; echo '<pre>'; print_r($connect->query("SELECT * FROM users")->fetchAll()); echo '</pre>'; } } index.php PHP: <?php declare(strict_types=1); error_reporting(E_ALL); ini_set('display_errors', 'on'); function myAutoload($class){ require __DIR__ . '/' . str_replace('\\', '/', $class) . '.php' ; } spl_autoload_register('myAutoload'); Runner::setUp();
Не правильно - реестр не имеет никакого отношения к БД. Это просто хранилище сервисных классов, доступное в любой точке приложения, можно реализовать даже на простом массиве.