我有一个复杂的场景,基于我正在使用的现有框架,这迫使我处理嵌套的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;
}
} 当我在MyClass的一个新实例上调用my_caller()时,它会调用their_caller,然后它会传递一个参数数组,其中包含对MyClass (作为$this)的引用以及my_callback方法。
然后,their_caller()将请求转发给their_callback并传递$options。
在their_callback中,我可以调试$options[0],并看到它是一个包含对MyClass和my_callback的引用的数组。
我在their_callback中的$options[0][0]上调用get_class_methods(),它将显示方法列表,但由于某些原因,call_user_func_array($options[0], $options[1]);不会在MyClass上调用my_callback。我甚至可以调用$options[0][0]->my_callback('HELLO');,它也能工作。
不幸的是,我不能修改their_caller或their_callback。它们是框架的一部分。你知道是什么阻止了它的工作吗?
发布于 2017-05-31 12:57:40
注意:你的函数
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();https://stackoverflow.com/questions/44275660
复制相似问题