@karasique

Require без ../?

Как сделать, чтобы при переносе кода типа require_once("../../navigaion.php"); в файл на любом другом уровне все подключалось?
В начале каждого подключаю так конфиг. Все остальное хотелось бы "автоматически".
  • Вопрос задан
  • 108 просмотров
Решения вопроса 1
tomnolane
@tomnolane
профессиональный разработчик
1) использовать composer
2) composer использует PSR
это типо что-то вроде этого:
vendor\Autoloader.php
<?php
/**
 * PSR-4 Autoload without composer 
 */
define('ROOT', __DIR__ . DIRECTORY_SEPARATOR);
define('SRC', str_replace("vendor\\","",ROOT) . DIRECTORY_SEPARATOR); // тут я удаляю из пути папку, в которой лежит данный автозагрузчик. В моём случае это папка "vendor"
 
spl_autoload_register(function ($class) {
    $file = str_replace('//', '/', str_replace('\\', '/', SRC .$class)) . '.php';
    if (file_exists($file)) {
        require_once $file;
    }
});


Структура проекта:
папка[root]->
        папка[vendor]->Autoloader.php
        папка[cars]->Car.php
        index.php

и далее делаете как хотите:
idnex.php
namespace kakoeto;

require_once 'vendor/Autoloader.php'; // тут подключается автолоадер
use Autoloader;

use cars\Car as Car; // вот тут подключаете всё что хотите. Главное, чтобы название класса совпадало с названием php файла, а-ля Car.php

.....
?>

Вот тут почитайте
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы