Лучший способ поделиться связью базы данных между классами - PullRequest
4 голосов
/ 08 апреля 2011

Я хотел бы иметь возможность скрыть соединение с базой данных от 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;
  }

}

1 Ответ

7 голосов
/ 08 апреля 2011

вы можете иметь статический метод в вашем классе базы данных, который будет возвращать свой экземпляр.

$db = DB::getInstance();

Более того, вы можете реализовать шаблон синглтона.Вы можете прочитать об этом здесь.

Шаблоны PHP

Основная идея заключается в том, что вы сохраняете объект БД в статическом свойстве, а затем в проверке getInstance, если он установлен, вы возвращаетеПри создании или создании нового конструктор должен быть закрытым, чтобы объект не мог быть создан нигде, кроме как в getInstance. Это гарантирует, что всегда существует один экземпляр объекта DB.

...