PHP – Require_once внутри конструкции класса

Когда я использую require_once и пытаюсь получить доступ к переменной в нужном файле, я получаю сообщение об ошибке, что переменная ( $db ) не определена.

Я попытался поместить инструкцию require_once несколько разных мест, потому что я думал, что это могут быть проблемы с переменной областью, но в этот момент я пытаюсь вызвать ее внутри конструктора и присваивать значение переменной класса.

Мой класс конфигурации:

 class Config { public $db; public function __construct() { require_once (BASE_DIR."config/DBConfig.php"); $this->db = $db; } } 

Файл DBConfig выглядит так:

 $db['default']['hostname'] = 'localhost' 

Я бы сделал это по-другому и использовал инъекцию зависимостей для этого, давая вам:

 public function __construct((IDb)$Db) { $this->db=$Db; } 

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

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

Похоже, что поскольку Require_once получает файл только при создании класса, переменная доступна только в первом объекте, который я создаю.

Тогда измените require_once чтобы require . require_once предназначен для включения файлов, которые определяют классы и функции, которые: a) не должны включаться более одного раза, а b) приводить к ошибкам, если они были включены более одного раза. Если вы всегда хотите включить файл, пропустите _once .

Сказав это, в том числе конфигурация базы данных более одного раза является признаком плохого дизайна.