Php PDO database singleton

Як `кошерно` реалізувати доступ до БД, щоб щоразу при зверненні не створювалося нове підключення? Я бачу два варіанти. Перший реалізувати так: 1. file Database.php

2. файл умовно index.php

другий - реалізувати клас Database as singleton.

Підкажіть хто давно пише на php. Чи дійсно при використанні першого варіанта не буде постійно відбуватися встановлення нового з'єднання. І якщо реалізувати через singleton, як `кошерно` зробити це використовуючи PDO. Ну чи є ще якийсь надійний та простий варіант. Дякую.

За першим варіантом: 1. Навіщо тут потрібний клас Database? 2. У тебе буде лише один клас у всьому додатку? або більше? А скільки буде коннектів після new myclass і new myclass2?

По другому. Високолоби не люблять синглетон. Чимось він їм там із тестуванням заважає. Плюс релігійна нетерпимість. Так що використовуй статичний синглтон тільки якщо у тебе код організований у вигляді класичного процедурного говнокоду.

Якщо ж у тебе все у вигляді кошерної ієрархії класів, то, як помічено в іншій відповіді, передавай з'єднання в клас, а не створювай його щоразу по-новому.

FanatPHP: при такому підході він дуже вигідно виглядає в порівнянні з тим же контейнером, який використовується в symfony 2. Т.к. Найчастіше нам потрібен, справді єдиний екземпляр. І ми працюємо з конкретним класом, а не якимось рядковим ключем.

У першому випадку це майже глобальні змінні, з усіма витікаючими.

>mysql та сфінкс. FanatPHP: Це абсолютно різні з'єднання. Не важливо, що ви, можливо, будете використовувати один і той же драйвер десь на низькому рівні, з точки зору роботиз ними, це дві абсолютно різні сутності: DBConnection, SphinxConnection. Тому що виконують абсолютно різні функції.

> майстер і слейв Ну, на рівні програми, це взагалі дивно реалізовувати. Про це повинен думати або кластер, або окремий сервіс, який реалізовуватиме вибір з'єднання. Але якщо все ж таки вам потрібно реалізувати в додатку, то реалізуйте клас, який повертатиме вже підготовлений екземпляр необхідного з'єднання:

FanatPHP: Наскільки я вас зрозумів, ви пропонуєте наступне: