问题描述
我的文件夹结构如下:
includes/
class-autoload.inc.PHP
config/
classes/
admin.class.PHP
admin/
clients.PHP
admin.class.PHP 是我尝试使用的文件的类。该文件包含。
<?PHP
class Admin extends Dbh{
.
.
.
我有我的 class-autoload.inc.PHP 文件,例如:
<?PHP
spl_autoload_register('myAutoLoader');
function myAutoLoader ($className){
$path = 'config/classes/';
$extension = '.class.PHP';
$fileName = $path . $className . $extension;
if(!file_exists($fileName)){
return false;
}
include_once $path . $className . $extension;
}
我试图在其中使用管理类的文件是 admin/ 文件夹中的 clients.PHP。我的clients.PHP文件是这样的:
<?PHP
include '../includes/class-autoload.inc.PHP' ;
$admin = new Admin();
Fatal error: Uncaught Error: Class 'Admin' not found
解决方法
相对路径不是基于当前文件的位置解析,而是基于运行时的“工作目录”。
要指定相对于当前文件的路径,请使用 magic constant __DIR__
,例如
include __DIR__ . '/../includes/class-autoload.inc.php';
和
include_once __DIR__ . '/../' . $path . $className . $extension;
另外一个提示,如果您使用 require
而不是 include
,如果找不到文件,您将收到错误消息,而不是静默失败。