Я хотел бы иметь возможность скрывать мое подключение к базе данных из print_r, поэтому я использую статическую переменную. У меня есть базовый класс и несколько классов объектов. В идеале все они будут использовать одно и то же соединение с базой данных. Каков наилучший способ поделиться этим? То, как я его настроил сейчас, «работает», но он просто не чувствует себя хорошо. Должен быть лучший способ сделать это. (логически классы не должны наследовать друг друга)
class base { private static $db; function __construct() { self::$db = new DB(); // our database class $foo = new Foo( self::$db ); // some other class that needs the same connection } } class Foo { private static $db; function __construct( $db ) { self::$db = $db; } }
вы можете иметь статический метод в своем классе базы данных, который будет возвращать экземпляр сам по себе.
$db = DB::getInstance();
кроме того, вы можете реализовать одноэлементный шаблон. Вы можете прочитать об этом здесь.
Шаблоны PHP
Основная идея заключается в том, что вы сохраняете свой объект DB в статическом свойстве, а затем в getInstance проверяете, установлен ли он для его возврата или создания нового, конструктор должен быть закрытым, чтобы объект не мог быть создан нигде, кроме getInstance. это гарантирует, что всегда существует один экземпляр объекта БД.