我有一個複雜的場景,基於我正在使用的現有框架,它迫使我處理嵌套的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