массив функций пользователя вызова и функция пользователя вызова


Сегодня я столкнулся с интересной проблемой. У нас есть приложение, которое использует функции кэширования Zend Framework. Запрос к этому приложению обычно вызывает заводской метод, используя следующую строку

$result =  call_user_func_array(array("myclass", "factory"), array($id));

Идея состоит в том, чтобы вернуть объект из заводского метода, к которому мы сможем получить доступ позже. Когда мы внедрили функцию кэширования, этот вызов просто, ну, умирает. Никаких ошибок, просто белый экран. В журнале ошибок ничего нет. Мы можем записать строку в журнал ошибок до того, как ок, но попытка error_log внутри заводского метода ничего не дает.

Достаточно интересно, изменив строку на:

$result =  call_user_func(array("myclass", "factory"), $id);

Устраняет проблему.

Мы потратили несколько часов на поиск сообщений об ошибках и не нашли ничего, что могло бы объяснить такое поведение. Есть какие-нибудь мысли?

Author: goose77, 2009-07-13

3 answers

У меня были подобные проблемы, которые сводились к тому, что __автозапуск не срабатывал должным образом, когда еще не загруженный класс вызывался с помощью команды PHP. Насколько я знаю, для этого нет другой стратегии, кроме тупых проб и ошибок, просто попробуйте, если строка явно вызывает класс до того, как команда PHP решит это за вас.

$dummy = new MyClassName;
call_user_func_array(array('MyClassName', 'method'), array($id));
unset($dummy);
 2
Author: dyve, 2009-07-15 11:11:20

Какую версию php вы используете? В какой-то момент возникла проблема с объединением call_user_func_array с ReflectionClass. Я не уверен, что это уже исправлено.

 0
Author: troelskn, 2009-07-13 17:35:18

Является ли это сегментацией? Проверьте свои "корневые" журналы apache (за пределами любого виртуального хоста) и посмотрите, что происходит. Если этот поток сегментирован, вы можете продолжить это в списках рассылки PHP и/или в системе отслеживания ошибок.

В качестве альтернативы вы можете попробовать запустить http в однопользовательском режиме, в GDB, с отладочной компиляцией php и посмотреть, сможете ли вы ее записать, но это большая работа:-)

 0
Author: Justin, 2009-07-13 18:16:13