I have an issue with my autoloader and namespaces. Below the autoloader
<?php spl_autoload_register( function( $class ) { $folder = 'include/'; $prefix = 'class.'; $ext = '.php'; $fullPath = $folder . $prefix . $class . $ext; if( !file_exists( $fullPath ) ){ print 'Class file not found!'; return false; } require_once $fullPath; }); ?>
Below the index file
<?php require 'autoload.php'; //use backslash for namespace $pers = new PersonPerson(); ?>
The file for the class Person is saved in the directory root->include->Person I used the namespace in the class file like this
<?php namespace Person; class Person{ function __construct(){ print 'autoload works'; } } ?>
If I visit the index file in the browser it returns ‘Class file not found’. Do I use the namespace correctly?
Advertisement
Answer
Change your autoload code a little
<?php spl_autoload_register( function( $class ) { $folder = 'include/'; $prefix = '.class'; $ext = '.php'; //replace the backslash $fullPath = $folder . str_replace( "\", '/', $class ) . $prefix . $ext; if( !file_exists( $fullPath ) ){ print 'Class file not found!'; return false; } require_once $fullPath; }); ?>