<?php
$base_dir = sys_get_temp_dir() . DIRECTORY_SEPARATOR;
file_put_contents($base_dir . 'Baz.php', "<?php namespace Foo\Bar; class Baz {}");
file_put_contents($base_dir . 'Buz.php', "<?php namespace Foo\Bar; class Buz {}");
spl_autoload_register(function ($class) {
// project-specific namespace prefix
$prefix = 'Foo\\Bar\\';
// base directory for the namespace prefix
global $base_dir;
// does the class use the namespace prefix?
$len = strlen($prefix);
if (strncmp($prefix, $class, $len) !== 0) {
// no, move to the next registered autoloader
return;
}
// get the relative class name
$relative_class = substr($class, $len);
// replace the namespace prefix with the base directory, replace namespace
// separators with directory separators in the relative class name, append
// with .php
$file = $base_dir . str_replace('\\', '/', $relative_class) . '.php';
// if the file exists, require it
if (file_exists($file)) {
require $file;
}
});
var_dump(new \Foo\Bar\Baz());
var_dump(new \Foo\Bar\BAZ());
var_dump(new \Foo\Bar\BUZ());
var_dump(new \Foo\Bar\Buz());
object(Foo\Bar\Baz)#2 (0) {
}
object(Foo\Bar\Baz)#2 (0) {
}
Fatal error: Uncaught Error: Class "Foo\Bar\BUZ" not found in /in/mSKeT:40
Stack trace:
#0 {main}
thrown in /in/mSKeT on line 40
Process exited with code 255.
object(Foo\Bar\Baz)#2 (0) {
}
object(Foo\Bar\Baz)#2 (0) {
}
Fatal error: Uncaught Error: Class 'Foo\Bar\BUZ' not found in /in/mSKeT:40
Stack trace:
#0 {main}
thrown in /in/mSKeT on line 40
Process exited with code 255.
Output for 7.2.5
Fatal error: Uncaught Error: Class 'Foo\Bar\Baz' not found in /in/mSKeT:37
Stack trace:
#0 {main}
thrown in /in/mSKeT on line 37
Process exited with code 255.
Output for 7.2.3
Warning: require(/tmp/Baz.php): failed to open stream: No such file or directory in /in/mSKeT on line 33
Fatal error: require(): Failed opening required '/tmp/Baz.php' (include_path='.:') in /in/mSKeT on line 33
Process exited with code 255.
object(Foo\Bar\Baz)#2 (0) {
}
object(Foo\Bar\Baz)#2 (0) {
}
Fatal error: Class 'Foo\Bar\BUZ' not found in /in/mSKeT on line 40
Process exited with code 255.