call_user_func_array vs. call_user_func

2019-04-06 13:56发布

I ran across an interesting issue today. We have an application that utilizes Zend Frameworks caching functionality. A request to this application typically calls a factory method using the following line

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

The idea is to return an object from the factory method that we can access later on. When we implemented a caching feature, this call just, well, dies. No errors, just a white screen. Nothing in the error log. We can error log the line before ok, but trying to error_log inside the factory method does nothing.

Interestingly enough, changing the line to :

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

fixes the issue.

We've spent a few hours looking around for bug reports and haven't come up with much to explain this behavior. Thoughts anyone?

3条回答
时光不老,我们不散
2楼-- · 2019-04-06 14:26

I have had issues like this that came down to __autoload not firing properly when a not-yet-loaded class was invoked through a PHP command. No other strategy than dumb trial and error for it as far as I know, just try if a line explicitly invoking the class before the PHP command solves it for you.

$dummy = new MyClassName;
call_user_func_array(array('MyClassName', 'method'), array($id));
unset($dummy);
查看更多
女痞
3楼-- · 2019-04-06 14:29

Which version of php are you using? There was an issue in combining call_user_func_array with ReflectionClass at one point. I'm not sure if it's fixed yet.

查看更多
对你真心纯属浪费
4楼-- · 2019-04-06 14:30

Is it segfaulting? Check your 'root' apache logs (outside of any virtualhost) and see whats going on. If that thread is segfaulting you may want to persue that on the PHP mailing lists and/or bug tracker.

Alternately you could try running http in single user mode, in GDB, with a debug-compile of php and see if you can capture it, but thats a lot of work :-)

查看更多
登录 后发表回答