класс — PHP вложенный call_user_func_array с классами

У меня сложный сценарий, основанный на существующей платформе, которую я использую, которая заставляет меня иметь дело с вложенными 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() на $options[0][0] в their_callback и он покажет список методов, но по какой-то причине, call_user_func_array($options[0], $options[1]); не буду звонить my_callback на MyClass, Я могу даже позвонить $options[0][0]->my_callback('HELLO'); и это работает.

К сожалению, я не могу изменить their_caller или же their_callback, Они являются частью структуры. Есть идеи, что мешает ему работать?

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();
0

Другие решения

Других решений пока нет …