【发布时间】:2017-12-26 12:36:39
【问题描述】:
我正在尝试在我的 php 网站https://github.com/niteshapte/advanced-error-exception-handler-logger-php 中实现这个错误处理类,但我不断收到错误
PHP 致命错误:在第 37 行的 www.example.com/application/core/ErrorExceptionHandler.php 中找不到特征“SingletonTrait”。
第 37 行是第二个 use SingletonTrait; 语句。
我只是在命名空间周围徘徊,然后特征出现了!
我的代码在下面……为简洁起见,我删除了很多代码,但完整的代码可以在上面的 github URL 上查看。
你能看出我做错了什么吗?
www.example.com/application/core/ErrorExceptionHandler.php 的来源
<?php
namespace Utilities;
use SingletonTrait;
if(!defined('DIRECT_ACCESS')) {
die("Direct access is forbidden.");
}
class ErrorExceptionHandler implements IUtilities {
// Singleton instance - the line below generates the error
use SingletonTrait;
....
}
来源 www.example.com/application/core/SingletonTrait.php
<?php
namespace Utilities;
use FrameworkException;
if(!defined('DIRECT_ACCESS')) {
die("Direct access is forbidden.");
}
trait SingletonTrait {
.....
}
www.example.com/application/core/FrameworkException.php 的来源
<?php
namespace Utilities;
if(!defined('DIRECT_ACCESS')) {
die("Direct access is forbidden.");
}
class FrameworkException extends \Exception { }
来源 www.example.com/application/core/IUtilities.php
<?php
namespace Utilities;
if(!defined('DIRECT_ACCESS')) {
die("Direct access is forbidden.");
}
interface IUtilities { }
www.example.com/index.php 的来源
<?php
require '../vendor/autoload.php';
use Utilities\ErrorExceptionHandler;
define("DIRECT_ACCESS", TRUE);
ErrorExceptionHandler::getInstance();
这就是我的 www.example.com/composer.json 中的内容
"autoload": {
"psr-4": { "": ["application/core/", "application/model/"],
"Utilities\\": "application/core/",
"SingletonTrait\\": "application/core/",
"FrameworkException\\": "application/core/"
}
}
将其上传到服务器后,我会在 PuTTY 命令行中发出 composer dump-autoload。
这会在 www.example.com/vendor/composer/autoload_psr4.php 生成以下源代码
<?php
// autoload_psr4.php @generated by Composer
$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);
return array(
'phpDocumentor\\Reflection\\' => array($vendorDir . '/phpdocumentor/reflection-common/src', $vendorDir . '/phpdocumentor/type-resolver/src', $vendorDir . '/phpdocumentor/reflection-docblock/src'),
'Webmozart\\Assert\\' => array($vendorDir . '/webmozart/assert/src'),
'Utilities\\' => array($baseDir . '/application/core'),
'Symfony\\Component\\Yaml\\' => array($vendorDir . '/symfony/yaml'),
'SingletonTrait\\' => array($baseDir . '/application/core'),
'Gregwar\\Captcha\\' => array($vendorDir . '/gregwar/captcha'),
'FrameworkException\\' => array($baseDir . '/application/core'),
'Doctrine\\Instantiator\\' => array($vendorDir . '/doctrine/instantiator/src/Doctrine/Instantiator'),
'DeepCopy\\' => array($vendorDir . '/myclabs/deep-copy/src/DeepCopy'),
'' => array($baseDir . '/application/core', $baseDir . '/application/model'),
);
我已尽可能多地阅读有关自动加载特征的内容,但我没有找到答案。
我的命令行 PHP 版本是 5.6.30。
【问题讨论】:
标签: php composer-php autoload psr-4