APC致命:缺少班级信息

时间:2013-03-07 18:08:17

标签: php class apc fatal-error

根据this PHP bug report,错误消息是由在if语句中嵌套一个类并使其静态声明引起的。

我只在一个地方宣布了一个类,但我用if:

保护它
if (!class_exists('myClass', false)) {
    class myClass{

(尝试做类似于C ++预处理器指令/条件包含的事情。)

这是为了防止多个编码器不正确地包含它的可能性(需要而不是require_once)。在这一点上,我唯一的另一种选择是注释掉if并搜索包含的应用程序,并将它们全部设为“require_once”。

那么,有没有其他人遇到过这个错误,除了将所有需求改为require_once之外,还有办法解决这个问题吗? (这个软件由多个编码器维护,因此我希望防止它失败。)

  • 此错误仅偶尔(随机)发生,当它发生时,我必须在类文件中添加/删除空格并重新保存以修复错误。

另外,我们安装APC的主要原因是IE 9及以下版本的文件上传进度支持。因此,如果我们可以保持启用这些部分,我们可以禁用任何导致此功能的功能(不确定是否可能。)

更新:显然重新保存文件没有效果。看起来它有一种“超时”。当错误发生时,我必须等待一段时间才能消失。

1 个答案:

答案 0 :(得分:0)

这似乎可能是由autoloading类引起的,也包括类本身中的类依赖。

在我们升级到PHP 5.3之前,我们没有选择使用PHP的自动加载功能。因此,我们必须在类文件中包含类依赖项。 例如:

<?php
require "parent_class.php";

if (!class_exists('this_class')) {
    class this_class extends parent_class {

当我们升级到PHP 5.3时,我们实现了类自动加载功能。这可能是“静态”和“动态”类声明(根据问题中的PHP Bug)发生的原因。 - 静态地在实际的类文件中声明,并在自动加载器中动态声明。

我完成了并删除了所有类依赖项的包含/需求。这解决了这个问题。