Это в некоторой степени продолжение предыдущего вопроса, но я разобрал вопрос, и теперь случаи «работает» и «не работает» сужаются гораздо точнее.
Моя цель:
У меня есть класс MyClass
, который имеет переменную экземпляра myFunction
. После создания объекта MyClass
(создание экземпляра) конструктор присваивает переменной экземпляра myFunction
с результатом вызова create_function
(где код и аргументы получены из вызова db).
Как только этот объект типа MyClass
создан (и сохранен как переменная экземпляра другого класса в другом месте), я хочу иметь возможность вызывать myFunction
(анонимная функция переменной экземпляра) из «где угодно», где у меня есть MyClass
объект.
Экспериментальные случаи - ниже приведен мой очень упрощенный тестовый код, чтобы проиллюстрировать, что работает, а что нет (то есть, когда ожидаемая функциональность нарушается)
class MyClass extends AnotherClass {
public $myFunction;
function __construct() {
$functionCode = 'echo "NyanNyanNyan";';
$this->myFunction();
/*Now the following code works as expected if put in here for testing*/
$anonFunc = $this->myFunction;
$anonFunc(); //This call works just fine (echos to page)!
/*And if i make this call, it works too! */
self::TestCallAnon();
}
public function TestCallAnon() {
$anonFunc2 = $this->myFunction;
$anonFunc2();
}
}
Однако, если я сделаю следующее (в другом файле, произойдет ошибка, говоря undefined function () в ... в журнале ошибок Apache.
//I'm using Yii framework, and this is getting the user
//objects instance variable 'myClass'.
$object = Yii::app()->user->myClass;
$object->TestCallAnon(); // **FAILS**
или
$func = $object->myFunction;
$func(); // ** ALSO FAILS **
Кроме того, несколько вариантов вызовов на call_user_func
и call_user_func_array
не работают.
Если кто-нибудь сможет предложить какую-то идею или помощь, это было бы здорово :).
Заранее спасибо!