我已经在SO阅读了相同问题的答案,但是他们没有帮助我解决我的问题。
我有以下目录结构:
这节课:
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
我做错了什么?
答案 0 :(得分:1)
我有另一个解决方案。如果您想继续使用PHP进行开发,这可能会很有用。
查看这些文章 - http://www.php-fig.org/psr/psr-0/和http://www.php-fig.org/psr/psr-4/。它们包含有关基于PHP的项目的类结构的官方批准标准。
我们不应该在这种情况下调查方向盘 - 所以尽量与官方标准""如果可能的话。
我创建了示例项目来展示如何应用上述规则。
项目结构:
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)
我刚刚制作了一个项目并复制了你的文件内容。 这个对我有用。 您的代码没有问题。