Вам следует
1) отключить конструктор, установив для него значение private.
2) создать отдельный объект PDO, вызвав только статический метод.Статический метод должен возвращать экземпляр объекта PDO.
В Silex или Symfony вам придется ставить имя класса с префиксом "\" или использовать "use \ PDO;".Что больше ничего не значит, что это глобальный класс.
Ps.если вы установите __constructor в public и используете return functino, обратите внимание, что он не будет генерировать никаких исключений или предупреждений, но вы получите возвращенный объект класса, а не фактическое значение оператора return.
So $ db = new Database () вернул бы объект класса Database.Затем оттуда вам нужно будет получить доступ к вашему PDO, используя метод класса.$ pdo = $ db-> getInstance () Это неправильный способ создания правильного синглтона.
Если вам интересно больше узнать о плюсах и минусах одиночных игр и некоторых случаях их использования, прочитайте эту Наилучшая практика поPHP синглтон классы , вы найдете больше информации об этом шаблоне дизайна.
/**
* Singleton pattern
*/
class Database
{
/**
* holds the only PDO instance
*/
private static $_instance;
/**
* private __constructor not accesible
*/
private function __construct()
{
self::$instance = new PDO(
"mysql:host=localhost;dbname=live",
"root",
"root"
);
}
/**
* clone will not duplicate object
*/
public function __clone()
{
die(__CLASS__ . ' class cant be instantiated. Please use the method called getInstance.');
}
/**
* the only public function to access or create PDO object
*/
public static function getInstance()
{
if(!self::$_instance instanceof PDO){
new self;
}
return self::$_instance;
}
}