Hi all. Been playing with some autoloading but couldn't get it to work. I'm trying to implement the PSR-4 (project scope) approach, but documentation is sketchy and I'm a bit lost as to the issue. I've read the PHP-Fig docs: http://www.php-fig.org/psr/psr-4/ and an trying to implement a script from the examples file: https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-4-autoloader-examples.md
My Directory Structure:
-src
- Baz
- Spotify.php
Here's the script (included in my index.php page):
/**
* An example of a project-specific implementation.
*
* After registering this autoload function with SPL, the following line
* would cause the function to attempt to load the \Foo\Bar\Baz\Qux class
* from /path/to/project/src/Baz/Qux.php:
*
* new \Foo\Bar\Baz\Qux;
*
* @param string $class The fully-qualified class name.
* @return void
*/
spl_autoload_register(function ($class) {
// project-specific namespace prefix
$prefix = 'Foo\\Bar\\';
// base directory for the namespace prefix
$base_dir = __DIR__ . '/src/';
// 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;
}
});
new \Foo\Bar\Baz\Spotify;
This should load the class in src/Baz/Spotify.php called Spotify. The Spotify.php file content:
class Spotify
{
public function __construct()
{
echo "yes";
}
}
This is the error:
Fatal error: Class 'Foo\Bar\Baz\Spotify' not found in xxxxxxxxxxxxxxx\autoloader.php on line 44
This is the line:
new \Foo\Bar\Baz\Spotify;
Strangely the file is loaded and I did a class_exists()
inside the file_exists()
conditional and everything looked fine:
if (file_exists($file)) {
require $file;
if(class_exists($relative_class)){
echo "I exist";
}
}
I got the message and then the error message mentioned. Am I missing something? I bet it's something really stupid and I'll look like a prize pumpkin, heh heh.