问题描述
<?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;
});
?>
在索引文件下方
<?PHP
require 'autoload.PHP';
//use backslash for namespace
$pers = new Person\Person();
?>
Person 类的文件保存在目录 root->include->Person 我像这样在类文件中使用了命名空间
<?PHP
namespace Person;
class Person{
function __construct(){
print 'autoload works';
}
}
?>
如果我在浏览器中访问索引文件,它会返回“找不到类文件”。 我是否正确使用了命名空间?
解决方法
您尝试包含 包含/class.Person\Person.php
- 如果你的操作系统是linux,你必须知道/和\之间有区别
- 文件夹名称中是否存在前缀类?
稍微更改您的自动加载代码
<?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;
});
?>