2011-05-28 56 views
2

有没有人有这方面的线索? PHP 5.2.13。结果并不完全一致,即一次可以得到一个页面的好结果,然后在另一个页面出现错误。奇怪的PHP方法行为不存在,但在代码

错误是致命的 - 类没有方法。

但下列条件:

类只在一个地方定义的,在代码中的相关方法。 发生故障的位置:反射显示该方法存在。 发生故障的地方:method_exists表示该方法不存在。前面的调用(它们都是静态的 - 不是我的选择)在代码早期的工作。

+6

你能展示一些代码吗? – 2011-05-28 18:25:00

+0

原始代码是Joomla的一部分,简单地说就是: '\t jimport('joomla.application.router'); \t $ router =&JRouter :: getInstance($ name,$ options);' 除此之外,诊断结果表明JRouter类存在于第一行之后,并且创建了一个反射类,并调用并转储了getMethods(),它显示getInstance是JRouter的一种方法(就像检查代码一样)。 – user185631 2011-05-30 07:55:46

回答

1

可能是它的相关:http://bugs.php.net/bug.php?id=51425

但我认为,我们在这里有一些高速缓存相关的问题。你有一些缓存启用?像APC或其他加速器一样?

+0

我也遇到过5.3.x中的method_exists问题,虽然这看起来不太相似。我使用method_exists的问题在于它在用不存在的类的类名调用时发生段错误(应简单地返回false)。奇怪的是,有人必须知道这个问题,因为Debian 5.3.3+和5.3.6+都能正常工作。但是这个问题不是段错误,而是一个PHP致命错误信息。诊断是矛盾的。很奇怪。 – user185631 2011-05-30 07:44:35

0

确保包含该方法的文件已包含在内。如果方法在类中,请确保创建类实例并通过该类调用该方法。

也许你错过了类实例?

+0

感谢您的评论。该类显示为通过转储class_exists()以及其他诊断来存在。所讨论的方法是静态的,因此不依赖于被实例化的类。 – user185631 2011-05-30 07:40:29

+0

静态类中的函数是否是私有的? – 2011-05-30 22:16:01