call_user_func_array与call_user_func

时间:2009-07-13 17:03:11

标签: php zend-framework caching

我今天遇到了一个有趣的问题。我们有一个利用Zend Frameworks缓存功能的应用程序。对此应用程序的请求通常使用以下行

调用工厂方法
$result =  call_user_func_array(array("myclass", "factory"), array($id));

我们的想法是从我们稍后可以访问的工厂方法返回一个对象。当我们实现缓存功能时,这个调用就好了。没有错误,只是一个白色的屏幕。错误日志中没有任何内容。我们可以在ok之前错误地记录该行,但是在factory方法中尝试error_log什么都不做。

有趣的是,将行改为:

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

解决了这个问题。

我们花了几个小时寻找错误报告,并没有提出太多解释这种行为。想什么?

3 个答案:

答案 0 :(得分:2)

我遇到过这样的问题,当通过PHP命令调用尚未加载的类时,__ autoload没有正确触发。据我所知,没有其他策略可用于愚蠢的试验和错误,只要尝试在PHP命令为您解决它之前显式调用该类的行。

$dummy = new MyClassName;
call_user_func_array(array('MyClassName', 'method'), array($id));
unset($dummy);

答案 1 :(得分:0)

您使用的是哪个版本的php?将call_user_func_arrayReflectionClass合并在一起存在问题。我不确定它是否已修复。

答案 2 :(得分:0)

是segfaulting吗?检查“root”apache日志(在任何虚拟主机之外)并查看最新情况。如果该线程是segfaulting,您可能希望在PHP邮件列表和/或错误跟踪器上继续该操作。

或者,您可以尝试在单用户模式下运行http,在GDB中,使用php的调试编译,看看是否可以捕获它,但这需要做很多工作: - )

相关问题