У меня есть класс Core\Router, который нужно использовать и в index.php, и в подключаемом файле routes.php. И хотелось бы писать use только в index.php, но тогда пишет, что класс Router не найден в файле routes.php (Fatal error: Uncaught Error: Class 'Router' not found ). Код файла routes.php:
<?php
Router::get('/', function () {
echo "Hello world!";
});
Код файла index.php:
<?php
require "core/router.php";
use Core\Router;
Router::set_folder('app/views/');
require "routes.php";
Можно ли записывать use в один файл, чтобы он работал и в подключаемых? Потому что код работает, если я напишу use и в routes.php.
Не очень хочется повторять use Core\Router, если будет много файлов, которые будут использовать этот класс.
Простой ответ: нет, нельзя.
Но кажется, вы немного запутались. use нужен для того, чтобы в текущем нэймспейсе можно было использовать псевдоним имени класса. Например у вас есть нэймспейс \ и \Core\, а в \Core\ есть класс Router. Чтобы в \ можно было писать просто Router, нужно импортировать имя, добавив use Core\Router. То есть use просто позволяет вам в начале объявить, что ниже под Router имеется ввиду \Core\Router. На мой взгляд, это довольно вредная возможность, так как она прячет от программиста бардак в нэймспейсах. Однако фичей широко пользуются, а популярные IDE автоматически добавляют use.
Чтобы не писать каждый раз use Core\Router, используйте Router только внутри нэймспейса \Core. А если он у вас глобальный, то переместите его в корневой нэймспейс \ (уберите объявление нэймспейса в файле класса Router) и пишите \Router. Но скорее всего вам не нужен глобальный Router, а много файлов, использующих его, говорят об архитектурных проблемах.
\Core\App::route().Если вы используете готовые библиотеки или фрэймворки и вам просто лень писать навязанный ими бойлерплейт (повторяющийся код, не относящийся к сути вашей задачи), то используйте IDE. Современный редактор всё напишет за вас.
Продвижение своими сайтами как стратегия роста и независимости