提问人:Jan Bloemkool 提问时间:12/28/2020 更新时间:12/28/2020 访问量:368
带有命名空间的 PHP 自动加载不加载文件
PHP autoload with namespaces do not load file
问:
我的自动加载器和命名空间有问题。 自动加载器下方
<?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';
}
}
?>
如果我在浏览器中访问索引文件,它会返回“找不到类文件”。 我是否正确使用命名空间?
答:
0赞
Eden Moshe
12/28/2020
#1
您尝试包括 包含/类。人\人:.php
- 如果你的 Os 是 linux,你必须知道 / 和 \ 之间有什么不同
- 文件夹名称中是否存在前缀类?
0赞
Jop
12/28/2020
#2
稍微更改一下您的自动加载代码
<?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;
});
?>
评论
echo $fullPath
看看它是否相关。include/class.Person\Person.php