#php #static-methods #php-5.2
#php #статические методы #php-5.2
Вопрос:
Кто-нибудь имеет представление об этом? PHP 5.2.13. Результаты не полностью согласованы, т. Е. может быть получен хороший результат со страницей в один момент, а затем ошибка в другой.
Ошибка является фатальной — у класса нет метода.
Но верно следующее:
Класс определен только в одном месте и имеет соответствующий метод в коде. В точке, где происходит сбой: отражение показывает, что метод существует. В точке, где происходит сбой: method_exists сообщает, что метод не существует. Предыдущие вызовы (все они статические — не мой выбор) ранее в коде работали.
Комментарии:
1. Не могли бы вы показать какой-нибудь код?
2. Исходный код является частью Joomla и выглядит просто: ‘ jimport( ‘joomla.application.router’); $router =amp; JRouter::getInstance($name, $options);’ К этому была добавлена диагностика, чтобы показать, что класс JRouter существует после первой строки, и создать класс отражения, вызвать и сбросить GetMethods(), который показывает, что getInstance является методом JRouter (как и проверка кода).
Ответ №1:
Может быть, это связано: http://bugs.php.net/bug.php?id=51425
Но я думаю, что здесь у нас есть некоторая проблема, связанная с кэшем. У вас включен какой-нибудь кэш? Как APC или любые другие ускорители?
Комментарии:
1. Я также страдал от проблем method_exists в 5.3.x, хотя это не кажется слишком похожим. Моя проблема с method_exists заключается в том, что он прерывается при вызове с именем класса для класса, который не существует (должен просто возвращать false). Любопытно, что кто-то должен знать о проблеме, потому что Debian 5.3.3 и 5.3.6 оба работают корректно. Но эта проблема связана не с ошибкой segfault, а с сообщением о фатальной ошибке PHP. И диагностика противоречива. Очень странно.
Ответ №2:
Убедитесь, что файл, содержащий метод, включен. Если метод находится в классе, убедитесь, что экземпляр класса создан и метод вызывается через класс.
Может быть, вам не хватает экземпляра класса?
Комментарии:
1. Спасибо за ваш комментарий. Класс отображается как существующий путем сброса class_exists() вместе с другими диагностическими данными. Рассматриваемый метод является статическим и, следовательно, не зависит от создаваемого экземпляра класса.
2. Являются ли функции частными в вашем статическом классе?