call_user_func Function

AKoval

Guest
call_user_func Function

Господа, может кто подсказать, в чем дело:

есть класс:

class abcd{
. . .
function fa(){
}
. . .
}

$obj = new abcd();

теперь я хочу использовать этот объект в скрипте, который только знает, что есть объект и что нужно выполнить определенную функцию (метод) этого объекта (простейший исполнитель - получет объект и название метода, который требуется выполнить).

вариант:
$exObj = &$obj;
$exMethod = "fa";
$exObj->$exMethod() почему-то не всегда работает, т.е. некоторые методы выполняются, некоторые - нет (говорит, что у объекта не найдена функция, хотя отладочная печать показывает, что и объект нормальный и функция такая в нем есть).
Дальше я нашел в мануале описание ф-ции call_user_func. После поисков по сети узнал, что ежели использрвать ее в виде:
call_user_func(array(object, "method"));
то она как раз годится для меня.

Пишу:
call_user_func(array(&$obj, "fa")); - работает.
если же пишу:
call_user_func(array(&$obj, $exMethod)); - полный аут с вылетом Apache (отлаживаю я на своем компе Win98+Apache1.3.19+PHP4.2.1).
Что-то неправильно в работает, а что - не знаю.
 

AKoval

Guest
Нет.
Warning:
The call_user_method() function is deprecated as of PHP 4.1.0, use the call_user_func() variety with the array(&$obj, "method_name") syntax instead.

Это выделено в мануале по call_user_method.
 

Crazy

Developer
Ok. В таком случае покажи полный неработающий код.

Ибо приведенный тобой выше код у меня работает корректно.
 

AKoval

Guest
К большлому сожалению, я не могу здесь выложить весь код, т.к. его размеры достаточно большие (250Кб).
Настораживает то, что достаточно простые вещи действительно работают хорошо, но как только уровень сложности (например иерархия классов или вложенность объектов) достигают какой-то критической отметки - начинаются какие-то непонятки. Возможно в этом моя вина (скорее всего чего-то недопонимаю или не так делаю). Очень нехорошо то, что в идентичных ситуациях реакция неоднозначна. Один раз проходит, другой - нет.
Хотя, возможно, это беда всех интерпретируемых языков.
Проблему временно закрыл (поставил большой Switch). Посмотрим, как будет развиваться система. Может и этого достаточно.
Спасибо за содействие.
Анатолий
 
Сверху