SPL Autoload不会加载类

时间:2014-12-24 21:11:15

标签: php spl-autoload-register

我已经在SO阅读了相同问题的答案,但是他们没有帮助我解决我的问题。

我有以下目录结构:

enter image description here

这节课:

namespace Util;

final class Autoloader
{
    public static function loader($class)
    {
        define('PHP_FILE_EXTENSION', '.php');
        $filename = '';
        $file = '';
        $phisicalFilePath = '';

        $filename = $class . PHP_FILE_EXTENSION;
        $phisicalFilePath = __DIR__ . DIRECTORY_SEPARATOR . $filename;

        if (file_exists($phisicalFilePath)) {
            require_once 'util/' . $filename;
        }
    }
}

我使用bootstrap.php文件中的上述类:

require_once('util/Autoloader.php');

spl_autoload_register('Util\Autoloader::loader');

我从index.php文件中调用所有内容:

require_once('bootstrap.php');

echo StringUtils::randomString(10);

但不幸的是,SPL自动加载不加载该类:

Fatal error: Class 'StringUtils' not found in 'xxx\index.php' on line 5

我做错了什么?

2 个答案:

答案 0 :(得分:1)

我有另一个解决方案。如果您想继续使用PHP进行开发,这可能会很有用。

查看这些文章 - http://www.php-fig.org/psr/psr-0/http://www.php-fig.org/psr/psr-4/。它们包含有关基于PHP的项目的类结构的官方批准标准。

我们不应该在这种情况下调查方向盘 - 所以尽量与官方标准""如果可能的话。


我创建了示例项目来展示如何应用上述规则。

项目结构:

Project tree

Autoloader.php已从此处复制:https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-4-autoloader-examples.md#class-example。唯一的区别是我的自动加载器已放置在命名空间Util中,其类已重命名为Autoloader

然后Account.php包含:

<?php

namespace Model;

class Account { }

index.php

<?php

require_once('Util/Autoloader.php');

$autoloader = new \Util\Autoloader();
$autoloader->addNamespace('\Model\\', __DIR__ . '/Model');
$autoloader->register();

$model = new \Model\Account();

答案 1 :(得分:0)

我刚刚制作了一个项目并复制了你的文件内容。 这个对我有用。 您的代码没有问题。