Использование класса базы данных в нескольких скриптах PHP

Я использую класс БД (с PDO) для доступа к серверу MySQL, и у меня есть вопрос по этому поводу.

У меня есть структура проекта, которая выглядит так: Структура проекта

Моя проблема в том, что мне нужно в каждом скрипте создавать и закрывать объект БД или есть другое решение этой проблемы? Какая в этих случаях привычка? Могу ли я как-то обобщить приведенный ниже фрагмент кода?

Сейчас на затронутых страницах это выглядит так:

try
{
    $db = new DB();
} catch (DBException $e)
{
    forwardToErrorPage($e->getMessage());
    return;
}

try
{
    if ($db->someDBFunction($args) == 0)
        header("Location: ../templates/success.php");
    else
        forwardToErrorPage('Adding person failed');
} catch (DBException $e)
{
    forwardToErrorPage($e->getMessage());
}
finally
{
    $db->close();
}

Используйте включает, еще лучше используйте классы и spl_autoload_register, см. Также СУХИЙ принцип

Quasimodo's clone 15.01.2019 08:30
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
1
64
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

вы можете включить require_once('/path/to/project/src/DB.php'); в заголовок всего файла, а в DB.php сделать дескриптор своей БД:

try
{
    $db = new DB();
} catch (DBException $e)
{
    forwardToErrorPage($e->getMessage());
    return;
}

Лучшее решение, которое я бы рекомендовал использовать ORM, например Eloquent (ссылка):

composer require illuminate/database

затем в вашем файле DB.php:

require_once "vendor/autoload.php";
use Illuminate\Database\Capsule\Manager as Capsule;

$capsule = new Capsule;

$capsule->addConnection([
   "driver" => "mysql",
   "host" =>"127.0.0.1",
   "database" => "acl",
   "username" => "root",
   "password" => ""
]);

$capsule->setAsGlobal();
$capsule->bootEloquent();
Ответ принят как подходящий

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

Еще один хороший подход - изменить ваш класс db на service и внедрение зависимости.

Я не хочу объяснять здесь шаблон Singleton, DI и сервисы, потому что в Интернете и на SO было много инструкций для этого.

Другие вопросы по теме