首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >带有类的PHP嵌套call_user_func_array

带有类的PHP嵌套call_user_func_array
EN

Stack Overflow用户
提问于 2017-05-31 12:28:49
回答 1查看 203关注 0票数 0

我有一个复杂的场景,基于我正在使用的现有框架,这迫使我处理嵌套的call_user_func_array调用。我有一个包含两个函数的文件:

代码语言:javascript
运行
复制
function their_caller($options)
{
  call_user_func_array('their_callback', $options);
}

function their_callback($options)
{
  call_user_func_array($options[0], $options[1]);
}

然后我有了另一个文件,其中包含一个带有的类和一些公共方法:

代码语言:javascript
运行
复制
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],并看到它是一个包含对MyClassmy_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_callertheir_callback。它们是框架的一部分。你知道是什么阻止了它的工作吗?

EN

回答 1

Stack Overflow用户

发布于 2017-05-31 12:57:40

注意:你的函数their_callback将会收到两个参数。

代码语言:javascript
运行
复制
<?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();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44275660

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档