Skip to content

Instantly share code, notes, and snippets.

@Rheola
Created February 21, 2019 08:34
Show Gist options
  • Save Rheola/f344e9ef5c74e8229cb5606401ace1f6 to your computer and use it in GitHub Desktop.
Save Rheola/f344e9ef5c74e8229cb5606401ace1f6 to your computer and use it in GitHub Desktop.
<?php
/**
* Created by PhpStorm.
* User: rheola
* Date: 08.10.2018
* Time: 12:22
*/
/**
* Пример реализации автозагрузика для проекта .
*
* После регистрации этого автозагрузчика с помощью SPL, следующая строка должна загрузить класс
* \Foo\Bar\Baz\Qux
* из файла /path/to/project/src/Baz/Qux.php :
*
* new \Foo\Bar\Baz\Qux;
*
* @param string $class
* @return void
* Полное имя класса
*/
spl_autoload_register(function ($class)
{
// Базовый префикс ространства имен для проекта
$prefix = 'Dss';
// базовый каталог для префикса пространства имен
$base_dir = __DIR__;
// класс использует префикс пространства имен?
$len = strlen($prefix);
if (strncmp($prefix, $class, $len) !== 0) {
// нет, переходим к следующему зарегистрированному автозагрузчику
return;
}
//получить относительное имя класса
$relative_class = substr($class, $len);
// заменить префикс пространства имен базовым каталогом,
// заменить разделители пространств имен разделителями
// каталогов в относительном имени класса ,
// добавить расширение . php
$file = $base_dir . str_replace('\\', '/', $relative_class) . '.php';
// если файл существует, загрузить его
if (file_exists($file)) {
require $file;
}
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment