2013-03-07 2 views
0

В соответствии с this PHP bug report сообщение об ошибке вызвано вложением класса в оператор if и его статическим объявлением.APC Fatal: Отсутствует информация о классе

У меня есть класс, объявленный в одном месте, но я защитил его с, если:

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

(Попытка сделать что-то похожее на препроцессор C++ директив/условных включений.)

Это должно было предотвратить отказ от возможности использования нескольких кодеров, в том числе и неправильного (требуется вместо require_once). Моя единственная альтернатива на данный момент заключается в том, чтобы прокомментировать if и искать приложение для включений и просто сделать их все «require_once».

Итак, кто-нибудь еще столкнулся с этой ошибкой, и есть ли способ обойти, помимо изменения всех требований 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 в вопросе). - Статически объявляется в фактическом файле класса и динамически объявляется в автозагрузчике.

Я прошел и удалил все требования include/require для классов. Это решило проблему.

Смежные вопросы