2012-03-13 6 views
0

Я управляю приложением PHP, и мы хотим включить APC сейчас. Проблема в том, что у нас есть два класса, которые требуют друг друга. Очень простой пример будет выглядеть следующим образом:APC, PHP и два класса, которые требуют друг друга

in class_a.php 

require_once('path/to/class_b.php)'; 

class a extends something { 
    // 
} 

in class_b.php 

require_once('path/to/class_a.php'); 

class b extends something2 { 
    //  
} 

Однако, когда мы включаем APC, есть «[АРС ошибка] Невозможно переопределить класс class_b в class_b.php». Ок, это потому, что класс уже загружен через require_once() в class_a.php, поэтому, если какой-то третий файл requre class_b.php, APC поднимет ошибку.

Как решить эту проблему с «круговой ссылкой»?

+0

Какая версия PHP у вас есть? Убедитесь, что пути являются точными. Убедитесь, что у вас нет затяжного файла с тем же именем в вашем include_path, если вы не укажете полный путь. – roychri

+0

попробуйте использовать автозагрузчики - это не позволит вам вернуться в такие проблемы – Mikhus

+0

PHP 5.3 и APC - самая последняя версия. Все включенные пути являются абсолютными и точно такими же. – ciscocert

ответ

1

Лучший способ решить эту проблему - избавиться от самой круговой зависимости. Я считаю, что он действительно квалифицируется как Code Smell.

Прочтите следующие инструкции: this article. Он должен предоставить вам альтернативный подход. Я просто надеюсь, что вы можете _ чтения _ Java ...

0

Видимо есть «особенность», которая позволит вам перекрыть require_once вызовов и позволяет им быть включены несколько раз. Поскольку, похоже, вы используете require_once, это, по-видимому, является вашей проблемой. Для того, чтобы отключить эту проверку для установки apc.include_once_override в php.ini или добавить в

[apc] 
apc.include_once_override = 0 

Эта настройка имеет проблемы с дублированием/не найдены классы и т.д. Смотрите, если это помогает