массив функций пользователя вызова и функция пользователя вызова
Сегодня я столкнулся с интересной проблемой. У нас есть приложение, которое использует функции кэширования Zend Framework. Запрос к этому приложению обычно вызывает заводской метод, используя следующую строку
$result = call_user_func_array(array("myclass", "factory"), array($id));
Идея состоит в том, чтобы вернуть объект из заводского метода, к которому мы сможем получить доступ позже. Когда мы внедрили функцию кэширования, этот вызов просто, ну, умирает. Никаких ошибок, просто белый экран. В журнале ошибок ничего нет. Мы можем записать строку в журнал ошибок до того, как ок, но попытка error_log внутри заводского метода ничего не дает.
Достаточно интересно, изменив строку на:
$result = call_user_func(array("myclass", "factory"), $id);
Устраняет проблему.
Мы потратили несколько часов на поиск сообщений об ошибках и не нашли ничего, что могло бы объяснить такое поведение. Есть какие-нибудь мысли?
3 answers
У меня были подобные проблемы, которые сводились к тому, что __автозапуск не срабатывал должным образом, когда еще не загруженный класс вызывался с помощью команды PHP. Насколько я знаю, для этого нет другой стратегии, кроме тупых проб и ошибок, просто попробуйте, если строка явно вызывает класс до того, как команда PHP решит это за вас.
$dummy = new MyClassName;
call_user_func_array(array('MyClassName', 'method'), array($id));
unset($dummy);
Какую версию php вы используете? В какой-то момент возникла проблема с объединением call_user_func_array
с ReflectionClass
. Я не уверен, что это уже исправлено.
Является ли это сегментацией? Проверьте свои "корневые" журналы apache (за пределами любого виртуального хоста) и посмотрите, что происходит. Если этот поток сегментирован, вы можете продолжить это в списках рассылки PHP и/или в системе отслеживания ошибок.
В качестве альтернативы вы можете попробовать запустить http в однопользовательском режиме, в GDB, с отладочной компиляцией php и посмотреть, сможете ли вы ее записать, но это большая работа:-)