2013-03-07 65 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)發生的方式。 - 靜態地在實際的類文件中聲明並在自動裝載器中動態聲明。

我經歷並刪除了所有對類依賴關係的包含/要求。這已經解決了這個問題。