2013-03-07 50 views
0

根据this PHP bug report,错误消息是由嵌套在if语句中的类引起的,并使其声明为静态。APC致命错误:缺少类信息

我只在一个地方声明的类,但我已经对保护它的,如果:

if (!class_exists('myClass', false)) { 
    class myClass{ 

(试图做类似C++预处理器指令/有条件包裹的东西。)

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

那么,是否有其他人遇到这个错误,并且除了将所有需求改为require_once外,还有其他方法可以解决吗? (该软件由多个编码器维护,因此我想保持它故障。)

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

在附注中,我们安装APC的主要原因是IE 9及以下的文件上传进度支持。所以如果我们可以只保留那些部分,我们可以禁用任何导致此问题的功能。 (不知道这是可能的。)

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

回答

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)发生的方式。 - 静态地在实际的类文件中声明并在自动装载器中动态声明。

我经历并删除了所有对类依赖关系的包含/要求。这已经解决了这个问题。