我有一个复杂的场景,基于我正在使用的现有框架,它迫使我处理嵌套的call_user_func_array
调用。我有一个文件有两个功能:PHP与类嵌套的call_user_func_array
function their_caller($options)
{
call_user_func_array('their_callback', $options);
}
function their_callback($options)
{
call_user_func_array($options[0], $options[1]);
}
然后我有一类和一些公共方法的另一个文件:
namespace FOO;
class MyClass
{
public function my_caller()
{
$operations = array(
array(
array($this, 'my_callback'),
'Hello World'
)
);
their_caller($operations);
}
public function my_callback($text)
{
print $text;
}
}
当我打电话my_caller()
上的MyClass
一个新实例,它调用their_caller
然后传递一个参数数组,其中包含对MyClass
(如$this
)的引用以及方法my_callback
。
their_caller()
然后将该请求转发给their_callback
并通过$options
。
在their_callback
我可以调试$options[0]
并看到它是一个数组,其中包含对MyClass
和my_callback
的引用。
我打电话get_class_methods()
在their_callback
$options[0][0]
,它会显示方法列表,但由于某些原因,call_user_func_array($options[0], $options[1]);
不会在MyClass
打电话my_callback
。我甚至可以拨打$options[0][0]->my_callback('HELLO');
,它可以工作。我不能修改their_caller
或their_callback
。他们是框架的一部分。任何想法是什么阻止它的工作?
奇怪的是,'$选项[0] [0] - > $选项[0] [1]($项[1]);'从内工作'their_callback' 。 – Ward