SAz*_*SAz 8 php autoload autoloader spl-autoload-register
根据PHP页面上的最高评论spl_autoload_register( ):
对于具有命名空间类的PHP 5.3用户来说是个好消息:
当您创建与包含类的名称空间匹配的子文件夹结构时,您甚至不必定义自动加载器.
<?php
spl_autoload_extensions(".php"); // comma-separated list
spl_autoload_register();
?>
Run Code Online (Sandbox Code Playgroud)
但是,当我有以下结构时:
* classes/someclass.php
* index.php
其中someclass.php包含以下内容:
<?php
class someclass {
function __construct( ) {
echo 'It works!';
}
}
?>
Run Code Online (Sandbox Code Playgroud)
并index.php包含:
<?php
spl_autoload_extensions(".php");
spl_autoload_register();
new classes\someclass;
?>
Run Code Online (Sandbox Code Playgroud)
然后我收到以下错误:
致命错误:spl_autoload():无法加载类classes\someclass
我弄错了吗?我怎样才能做到这一点?
从评论
这对于班级不起作用:
<?php
namespace classes;
class someclass {
function __construct( ) {
echo 'It works!';
}
}
?>
Run Code Online (Sandbox Code Playgroud)
TLDR; 它有效,但是:
namespace classes; 缺少 classes/someclass.phpset_include_path(__DIR__); 缺少 index.phpspl_autoload_extensions(".php")没必要)在SPL自动加载的实现是包括基于路径.使用点作为包含路径是相对于工作目录(!),它独立于脚本文件位置.__DIR__如果classes文件夹位于文件旁边,则命名所需的确切目录,index.php如方案中所示.
接下来,自动加载器实现会在Unix系统上正确映射类命名空间分隔符.如果在o/p中丢失,PHP源代码显然有这个.
源代码还显示了要加载的文件名是小写的.也就是说,如果您的文件系统区分大小写,则文件和目录名称必须为小写.
Refernces:
| 归档时间: |
|
| 查看次数: |
1535 次 |
| 最近记录: |