0

根据这个 PHP 错误报告,错误消息是由在 if 语句中嵌套一个类并静态声明它引起的。

我只在一个地方声明了一个类,但我用 if 保护了它:

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

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

这是为了防止因多个编码器不正确地包含它而失败(require 而不是 require_once)。在这一点上,我唯一的其他选择是注释掉 if 并在应用程序中搜索包含,然后将它们全部设为“require_once”。

那么,有没有其他人遇到过这个错误,除了将所有要求更改为 require_once 之外,还有其他方法可以解决吗?(这个软件由多个编码人员维护,所以我想防止它失败。)

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

附带说明一下,我们安装 APC 的主要原因是为了支持 IE 9 及更低版本的文件上传进度。因此,如果我们可以只启用这些部分,我们可以禁用导致此问题的任何功能。(不确定这是否可能。)

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

4

1 回答 1

0

似乎这可能是由自动加载类以及在类本身中包含类依赖关系引起的。

在我们升级到 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)的发生方式。- 在实际类文件中静态声明并在自动加载器中动态声明。

我检查并删除了类依赖项的所有包含/要求。这解决了这个问题。

于 2013-03-07T19:05:23.570 回答