Browse Source

**feat:** initial idea

Sina Kuhestani 1 week ago
parent
commit
0015e7b2e0
2 changed files with 49 additions and 0 deletions
  1. 7 0
      autoload.php
  2. 42 0
      src/Autoloader.php

+ 7 - 0
autoload.php

@@ -0,0 +1,7 @@
+<?php
+
+use ePHPic\Autload\Autoloader;
+
+include __DIR__ . DIRECTORY_SEPARATOR . "src" . DIRECTORY_SEPARATOR . "Autoloader.php";
+
+Autoloader::register();

+ 42 - 0
src/Autoloader.php

@@ -0,0 +1,42 @@
+<?php
+
+namespace ePHPic\Autload;
+
+class Autoloader
+{
+    private static $baseDir = "some/where/in/my/app";
+    private static $map = [
+    ];
+
+    public static function resolve($class, $path = null)
+    {
+        if(isset(static::$map[$class]))
+        {
+            return static::$baseDir . "/" . static::$map[$class] . ($path ? "/$path" : "") . ".php";
+        }
+        $lastBackslashPos = strrpos($class, '\\');
+        if ($lastBackslashPos !== false) {
+            $path = substr($class, $lastBackslashPos+1, strlen($class) - 1) . ($path ? "/$path" : "");
+            $class = substr($class, 0, $lastBackslashPos);
+            return static::resolve($class, $path);
+        }
+
+        return static::$baseDir . "/" . str_replace("\\","/",$class) . ($path ? "/$path" : "") . ".php";
+    }
+    public static function autoload($class)
+    {
+        $filePath = static::resolve($class);
+        if(@file_exists($filePath))
+        {
+            include_once $filePath;
+        }
+    }
+    public static function register()
+    {
+        spl_autoload_register(
+            [static::class, "autoload"], 
+            true, 
+            true
+        );
+    }
+}