Итак, у меня есть файл конфигурации, config_inc.php:
<?php
static $config = Array();
$config['dbHost'] = 'localhost';
$config['dbPass'] = '';
$config['dbUser'] = 'root';
$config['dbName'] = 'recipes_comments';
?>
И тогда у меня есть контроллер, который должен загружать эти переменные с помощью require_once:
require_once "config_inc.php";
class Controller {
public function regUser() {
echo $config['dbHost'];
}
}
Я пытался найти сообщения с похожими ошибками, но не смог найти решение, которое исправляет это.
Когда я пытаюсь отобразить переменную, определенную в config_inc.php, как показано выше, я получаю сообщение об ошибке, что config не определена.
Мой вопрос: почему конфиг не определен в контроллере и как это правильно сделать?
config не определен в Controller, потому что он не глобален.
Плохой путь
Вы должны сначала заменить static
от global
в вашем конфигурационном файле, затем добавьте global $config
в начале вашей функции.
Правильный путь
Не используйте глобальный в php. Вместо этого передайте свой $config
массив в конструкторе вашего класса, или добавить его другим способом. Например
require_once "config_inc.php";
class Controller {
private $config;
public function regUser() {
echo $this->config['dbHost'];
}
public function __construct($config)
{
$this->config = $config;
}
}
$controller = new Controller($config);
$controller->regUser();
Это проблема сферы. Вы пытаетесь получить доступ к переменной, которую ваш класс не может видеть из своей области видимости.
$ config — это глобальная переменная в вашем коде. Это означает, что он существует в глобальном масштабе.
попробуй это:
require_once "config_inc.php";
class Controller {
public function regUser() {
echo $GLOBALS['$config']['dbHost'];
}
}