Ekdant-Online-Store/system/engine/autoloader.php
2024-08-06 18:06:00 +05:45

82 lines
1.8 KiB
PHP

<?php
/**
* @package OpenCart
* @author Daniel Kerr
* @copyright Copyright (c) 2005 - 2017, OpenCart, Ltd. (https://www.opencart.com/)
* @license https://opensource.org/licenses/GPL-3.0
* @link https://www.opencart.com
*/
namespace Opencart\System\Engine;
/**
* Class Autoloader
*/
class Autoloader {
/**
* @var array
*/
private array $path = [];
/**
* Constructor
*/
public function __construct() {
spl_autoload_register([$this, 'load']);
spl_autoload_extensions('.php');
}
/**
* Register
*
* @param string $namespace
* @param string $directory
* @param bool $psr4
*
* @return void
*
* @psr-4 filename standard is stupid composer has lower case file structure than its packages have camelcase file names!
*/
public function register(string $namespace, string $directory, $psr4 = false): void {
$this->path[$namespace] = [
'directory' => $directory,
'psr4' => $psr4
];
}
/**
* Load
*
* @param string $class
*
* @return bool
*/
public function load(string $class): bool {
$namespace = '';
$parts = explode('\\', $class);
foreach ($parts as $part) {
if (!$namespace) {
$namespace .= $part;
} else {
$namespace .= '\\' . $part;
}
if (isset($this->path[$namespace])) {
if (!$this->path[$namespace]['psr4']) {
$file = $this->path[$namespace]['directory'] . trim(str_replace('\\', '/', strtolower(preg_replace('~([a-z])([A-Z]|[0-9])~', '\\1_\\2', substr($class, strlen($namespace))))), '/') . '.php';
} else {
$file = $this->path[$namespace]['directory'] . trim(str_replace('\\', '/', substr($class, strlen($namespace))), '/') . '.php';
}
}
}
if (isset($file) && is_file($file)) {
include_once($file);
return true;
} else {
return false;
}
}
}