我从一个未引用调试器类的文件中收到标题中引用的错误。如果我手动导入调试器,仍然显示错误。最后一个 } 中的错误中引用的行号,用于结束文件中的类定义。} 后面没有任何东西(也没有 ?>)。据我所知,我收到错误的文件并没有直接引用调试器(例如,没有显式使用调试器)。
下面是堆栈跟踪:
( ! ) Fatal error: Class 'Debugger' not found in /home/gregg/workspace/Fueled/dapprly/backend/app/Plugin/Facebook/Controller/Component/FapiComponent.php on line 107
Call Stack
# Time Memory Function Location
1 0.0003 245664 {main}( ) ../index.php:0
2 0.0168 1657712 Dispatcher->dispatch( ) ../index.php:100
3 0.0237 2753568 Dispatcher->_invoke( ) ../Dispatcher.php:85
4 0.0237 2753768 Controller->constructClasses( ) ../Dispatcher.php:99
5 0.0237 2755712 ComponentCollection->init( ) ../Controller.php:638
6 0.0255 3057112 ComponentCollection->load( ) ../ComponentCollection.php:52
7 0.0255 3057600 class_exists ( ) ../ComponentCollection.php:99
8 0.0255 3057896 App::load( ) ../ComponentCollection.php:0
9 0.0257 3091416 ErrorHandler::handleError( ) ../ComponentCollection.php:551
以下是第 107 行周围的上下文:
class FapiComponent extends Component {
// -- snip -- //
public function method()
{
$url = urlencode('http://url');
$param = array(
'access_token' => '##' ,
'object' => 'user',
'fields' => 'feed',
'callback_url' => $url);
$id = $this->facebook->getAppId();
$subs = $this->facebook->api('/' . $id . '/subscriptions' , 'POST' , $param);
}
} // <-- line 107 ... nothing after this
这是
由于一个PHP错误,该错误没有对编译时错误(例如,E_STRICT
)执行自动加载。
这在 PHP 5.4.21 中得到了修复,CakePHP 接受了变通拉取请求。
要手动解决此问题并从 CakePHP 的错误处理程序中免除E_STRICT
:
- 在您喜欢的编辑器中打开
core.php
(您可以通过执行类似find . -name core.php
的操作来找到该文件)。 - 找到以下行:
'level' => E_ALL & ~E_DEPRECATED,
- 将其替换为:
'level' => E_ALL & ~E_DEPRECATED & ~E_STRICT,
我发现了错误。
我展示的这个类实现了初始化方法。但它被实现为
public function initialize($controller)
这是一个E_STRICT错误,因为它与父方法不同,因为它省略了类型提示。我的设置正在捕获E_STRICT错误。此错误导致它查找调试器。我不确定为什么它无法自动加载它,但将方法更改为
public function initialize(Controller $controller)
解决了我遇到的问题。
每当出现E_STRICT错误时,都会发生这种情况。 我的主要问题是在运行 PHP 5.4 时,您需要具有公共、私有和受保护的函数声明。
问题是低于版本
5.4.21 的 php 在E_STRICT错误时自动加载器存在问题。(E_STRICT是编译时错误)
https://bugs.php.net/bug.php?id=65322
我在某些旧项目上遇到了完全相同的问题,并在 2.7.4 中修复了这个问题。
https://github.com/cakephp/cakephp/issues/7376
所以真正的解决方案是升级到至少 5.4.21 或等待 CakePHP 2.7.4