Рубрики
Uncategorized

Простой автозагрузчик PSR-4

Вы даже использовали файл composer.json исключительно для регистрации автозагрузчика PSR-4? I… С тегами php, веб-разработчик, программирование, wordpress.

Быстрые советы по PHP (Серия из 3 частей)

Вы даже использовали файл composer.json исключительно для регистрации автозагрузчика PSR-4? У меня есть, и мне всегда казалось немного странным требовать такой кусок кода для такой простой задачи. Он добавляет папку поставщик и кучу пустых файлов. Мне не нравятся эти накладные расходы, когда в них нет необходимости.

Итак, вот отличная альтернатива. Вы можете, например, использовать это в теме WordPress или плагине.

spl_autoload_register(function (string $class_name): void {
    // Map the namespace to the corresponding folder
    $namespace_mapping = [
        'DoekeNorg\\BlogTheme' => 'src',
    ];

    foreach ($namespace_mapping as $namespace => $directory) {
        if (
            strpos($class_name, $namespace = trim($namespace, '\\')) !== 0
            || (!$directory = realpath(__DIR__ . DIRECTORY_SEPARATOR . trim($directory, DIRECTORY_SEPARATOR)))
        ) {
            continue; // Class name doesn't match or the directory doesn't exist
        }

        // Require the file
        $class_file = $directory . str_replace([$namespace, '\\'], ['', DIRECTORY_SEPARATOR], $class_name) . '.php';
        if (file_exists($class_file)) {
            require_once $class_file;
        }
    }
});

Как использовать этот автозагрузчик

  1. Сохраните этот файл как autoload.php например, и заполните правильные значения для $ сопоставление пространств имен
  2. требовать этот файл внутри вашего файла начальной загрузки или файла ввода темы/плагина

Это оно. Теперь вы можете ссылаться на любой класс с этим пространством имен, и автозагрузчику потребуется правильный файл.

Отображение выполняется относительно местоположения autoload.php файл, так что вы также можете делать такие вещи, как это:

|-- blog-theme
    |-- src
    |-- vendor
        |-- autoload.php <- the autoloader 
    |-- public
        |-- index.php <- entry file

Когда вам требуется поставщик/autoload.php внутри публичный/index.php вы можете настроить свое отображение следующим образом, и решение все равно будет работать.

 $namespace_mapping = [
    'DoekeNorg\\BlogTheme' => '../src',
];

Не могли бы вы превратить это в хороший урок? Конечно, но было бы это действительно лучше?

Это большая победа над Композитором? Нет, это не большая победа, а маленькая; может быть. Он также никоим образом не предназначен для замены композитора, потому что он более оптимизирован. Просто для простого плагина или темы вам не нужны накладные расходы, которые создает композитор.

Быстрые советы по PHP (Серия из 3 частей)

Оригинал: “https://dev.to/doekenorg/a-simple-psr-4-autoloader-4635”