Когда я использую 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
.
Сказав это, в том числе конфигурация базы данных более одного раза является признаком плохого дизайна.