0

我有一个基于我正在使用的现有框架的复杂场景,这迫使我处理嵌套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(as $this) 的引用以及方法my_callback

their_caller()然后将请求转发给their_callback并传递$options

their_callback可以调试$options[0]并看到它是一个包含对MyClassand的引用的数组my_callback

我调用get_class_methods()$options[0][0]their_callback它会显示方法列表,但由于某种原因,它call_user_func_array($options[0], $options[1]);不会调用my_callback. MyClass我什至可以打电话$options[0][0]->my_callback('HELLO');,它的工作原理。

不幸的是,我无法修改their_callertheir_callback. 它们是框架的一部分。任何想法是什么阻止它工作?

4

1 回答 1

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();
于 2017-05-31T04:57:39.860 回答