APC, PHP и два класса, которые требуют друг друга - PullRequest
0 голосов
/ 13 марта 2012

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

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, возникает «[apc-error] Невозможно повторно объявить class_b класса в class_b.php». Хорошо, это потому, что класс уже был загружен с помощью require_once () в class_a.php, поэтому, если какой-то 3-й файл потребует class_b.php, APC выдаст ошибку.

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

Ответы [ 2 ]

1 голос
/ 13 марта 2012

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

Попробуйте выполнить следующие инструкции в этой статье .Это должно предоставить вам альтернативный подход.Я просто надеюсь, что вы сможете _ прочитать _ Java ...

0 голосов
/ 25 июля 2013

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

[apc]
apc.include_once_override = 0

У этого параметра есть известные проблемы с дублирующимися / не найденными классами и т. Д. Проверьте, помогает ли это

...