Класс не найден после запроса файла, содержащего оператор использования

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

file1.php

<?php
require_once '../vendor/autoload.php';
use RedBean_Facade as R;
R::setup();
?>

file2.php

<?php
require_once 'file1.php';
R::debug(true);
?>

Однако переход к file2.php показывает эту ошибку:

Неустранимая ошибка: класс 'R' не найден в /file1.php в строке 5

Не используют ли операторы пространства имен в PHP? includeд?

1 ответ

Решение

В PHP namespace а также use объявления действительны только в том физическом файле, в котором они появляются. Эти объявления не охватывают requires. Они уже обрабатываются во время компиляции.

Если a.php использует псевдонимы в своем пространстве имен, и он включается b.phpпсевдонимы, определенные в a.php не будут видны b.php,

Вы должны будете вставить свой use заявление в каждый файл. Вот документация:

Правила импорта для каждого файла

Тем не менее, вы можете обойти это, используя class_alias:

class_alias('RedBean_Facade', 'R');
Другие вопросы по тегам