これは以前の質問に続くフォローアップですが、質問を絞り込み、「作品」と「うまくいかない」ケースはるかに正確に絞られました。PHP create_functionインスタンス変数 - 無名関数を呼び出すことができません:フォローアップ
私の目標: 私はインスタンス変数myFunction
を持つクラスMyClass
を持っています。 MyClass
オブジェクトを作成すると(インスタンス化)、コンストラクタはインスタンス変数myFunction
にcreate_function
(ここでコードとargはdb呼び出しから取得されます)の呼び出し結果を割り当てます。
タイプMyClass
のこのオブジェクトが作成(および他の場所で別のクラスのインスタンス変数として格納)されると、私はMyClass
オブジェクトを持っていることを「どこでも」からmyFunction
(インスタンス変数匿名関数)を呼び出すことができるようにしたいです。
試験例 - 以下の私の非常に簡略化テストコードは(すなわち時に期待される機能ブレーク)ではない何を対どのような作品説明することである
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();
}
}
しかし、私が行った場合Apacheのエラーログ内で...、次の(別のファイルに、そのエラーが言っ未定義関数()。
//I'm using Yii framework, and this is getting the user
//objects instance variable 'myClass'.
$object = Yii::app()->user->myClass;
$object->TestCallAnon(); // **FAILS**
加えて、3210 または
$func = $object->myFunction;
$func(); // ** ALSO FAILS **
、call_user_func
とcall_user_func_array
への呼び出しのいくつかのバリエーションが動作しません。
誰かが洞察力や助けを提供できれば素晴らしいです:)。
ありがとうございます!
ご意見ありがとうございます。私は実際に 'call_user_func(array($ object、$ funcName)、array())'を運行なしで試しました。これは、 '振る舞いにはメソッドやクロージャという名前のない "というエラーがあります。つまり、$ funcNameが空であることを意味します。しかし、私は$ funcNameの上にその行をエコーすると、それは私に "lambda_3"を与えます。 – csjohn
'call_user_func'から得られるPHPエラーのようには見えません。 – Halcyon