Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save emresaracoglu/35e0181b42aadd118862ee253fa69343 to your computer and use it in GitHub Desktop.
Save emresaracoglu/35e0181b42aadd118862ee253fa69343 to your computer and use it in GitHub Desktop.
PHP 5.4 Namespace-based Autoloader
<?php
// Probably unnecessary, but wanted to test the waters of 5.4
trait NamespaceConverter
{
function nsToPath($class) {
return str_replace('\\', DIRECTORY_SEPARATOR, $class) . '.php';
}
}
// Namespace-based paths (e.g. "new Foo\Component\Bar()" => "/Foo/Component/Bar.php")
class Autoloader
{
use NamespaceConverter;
public $basePath;
public function __construct($basePath = '.')
{
$this->basePath = realpath($basePath);
spl_autoload_register([$this, 'load']);
}
public function load($class)
{
$file = $this->basePath . DIRECTORY_SEPARATOR . $this->nsToPath($class);
if (file_exists($file)) include $file;
}
}
/*
Usage:
$loader1 = new Autoloader('path/to/some/core/classes');
$loader2 = new Autoloader('path/to/some/vendor/classes');
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment