我有一个复杂的场景,基于我使用的现有框架迫使我处理嵌套的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
的引用的参数数组(作为{{1} }}以及方法$this
。
my_callback
然后将请求转发给their_caller()
并传递their_callback
。
在$options
我可以调试their_callback
,看到它是一个包含对$options[0]
和MyClass
的引用的数组。
我在my_callback
的{{1}}上致电get_class_methods()
,它会显示方法列表,但出于某种原因,$options[0][0]
不会调用{{1}在their_callback
上。我甚至可以致电call_user_func_array($options[0], $options[1]);
,但它确实有效。
很遗憾,我无法修改my_callback
或MyClass
。它们是框架的一部分。什么想法阻止它工作?
答案 0 :(得分:0)
注意:您的函数
their_callback
将收到两个参数。
<?php
ini_set('display_errors', 1);
function their_caller($options)
{
call_user_func_array('their_callback', $options);
}
//first argument will receive callback
//second argument will receive the text which you want to send as argument.
function their_callback($callback,$option)
{
//call_user_func_array should expect second argument as array not string.
call_user_func_array($callback, array($option));
//here we have converted `$option` string(Hello World) to array.
}
class MyClass
{
public function my_caller()
{
$operations = array(
array(
array($this, 'my_callback'),
'Hello World'
)
);
call_user_func_array('their_caller', $operations);
}
public function my_callback($text)
{
print $text;
}
}
$object= new MyClass();
$object->my_caller();