【发布时间】:2017-02-21 16:51:25
【问题描述】:
我们的自动加载器有一个神秘的问题:
function psr4_default_autoload( $class )
{
// project-specific namespace prefix
$prefix = 'basefolder\\';
// base directory for the namespace prefix
$base_dir = SOURCE_DIR . '/';
// does the class use the namespace prefix?
$len = strlen( $prefix );
if ( strncmp( $prefix, $class, $len ) !== 0 ) {
// no, move to the next registered autoloader
return;
}
// get the relative class name
$relative_class = substr( $class, $len );
// replace the namespace prefix with the base directory, replace namespace
// separators with directory separators in the relative class name, append
// with .php
$file = $base_dir . str_replace( '\\', '/', $relative_class ) . '.php';
if ( file_exists( $file ) ) {
require_once $file;
}
}
SOURCE_DIR是绝对路径。否则它是原始的 psr4 自动加载器示例:https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-4-autoloader-examples.md
此自动加载器可在我的 Linux PC 和我们的服务器上运行。但是,在 Windows 上 file_exists( $file ) 返回 true,但 require_once $file; 将不起作用。如果我们回显$file,它会准确地返回我们要加载的文件,并且该文件也准确地存在于那里。
错误信息是:
致命错误:在第 14 行的 C:\xampp\htdocs\xyz\classes\DatabaseAbstraction\Entity\UserLogin.php 中找不到类 'basedir\DatabaseAbstraction\AEntity'
那行是:class UserLogin extends AEntity。背景:
namespace basedir\DatabaseAbstraction\Entity;
use basedir\DatabaseAbstraction\AEntity;
class UserLogin extends AEntity
有什么想法吗?
【问题讨论】:
-
现在我会保留我的答案,因为我相信无论如何您都会遇到这个问题...关于您的编辑,触发错误时
$file的内容是什么?跨度> -
$file一切正常。<?php中缺少一个 php ... -
至少你现在有一些工作。不过,为此添加检查可能会很好;)