Паттерн Registry - самое простое, Service Locator и DI-контейнер - покруче. Можно готовый взять: php-di.org. Но начни с Registry: PHP: class Registry { static private $r = []; static public function get($what) { return self::$r[$what]; } static public function set($what, $obj) { self::$r[$what] = $obj; } } // В начале файла index.php, до того, как дальше передавать // Если не единая точка входа, то в начале каждой точки входа, или подключить файл с таким содержанием $db = new PDO(/* параметры */); Registry::set("db", $db); // Там, где понадобилось class Fignya { public function super() { $db = Registry::get("db"); } }
PHP: class DB { private static $db; private static $host = 'localhost'; private static $dbname = 'test'; private static $charset = 'utf8'; private static $username = 'root'; private static $password = ''; static public function connect() { if (self::$db === null) { self::$db = new PDO("mysql:host=".self::$host.";dbname=".self::$dbname.";charset=".self::$charset, self::$username, self::$password); } return static::$db; } }
Код (Text): # подключаемся к базе данных try { $DBH = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass); $DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); # Черт! Набрал DELECT вместо SELECT! $DBH->prepare('DELECT name FROM people')->execute(); } catch(PDOException $e) { echo "Хьюстон, у нас проблемы."; file_put_contents('PDOErrors.txt', $e->getMessage(), FILE_APPEND); }
Зачем добавил еще static в для private переменных, ты еще где то собираешься их вызывать? Для $db понятно можно указать static)))
Лучше с мануала взять, и потом под себя делать его! PHP: <?php define('DB_HOST', 'localhost'); define('DB_NAME', 'test'); define('DB_USER', 'root'); define('DB_PASS', ''); define('DB_CHAR', 'utf8'); class DB { protected static $instance = null; public static function instance() { if (self::$instance === null) { $opt = array( PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::ATTR_EMULATE_PREPARES => TRUE, ); $dsn = 'mysql:host='.DB_HOST.';dbname='.DB_NAME.';charset='.DB_CHAR; self::$instance = new PDO($dsn, DB_USER, DB_PASS, $opt); } return self::$instance; } public static function __callStatic($method, $args) { return call_user_func_array(array(self::instance(), $method), $args); } public static function run($sql, $args = []) { $stmt = self::instance()->prepare($sql); $stmt->execute($args); return $stmt; } }
Зачем ты такое советуешь? С мануала ллюбой дурак может. Желательно разобраться и в итоге сможешь сам написать, не ища всякие там мануалы. В мануал можно подсмотреть для понимания логики, если совсем туго.