<?php
$ar = (object) array('a'=>function(){
echo 'TEST';
});
$ar->a();
?>
このエラーが発生します未定義のメソッドの呼び出し
アップデート:
PHP 5.3以降を使用している場合は、他の回答をご覧ください:)
私はそれが正しい構文だとは思いません、それはあなたに与えるでしょう:
Parse error: syntax error, unexpected T_FUNCTION in....
クラスを作成し、それにメソッドを追加し、new
キーワードを使用してインスタンス化する必要があります。そうすれば、次のことができるようになります。
$ar->a();
class myclass
{
public function a()
{
echo 'TEST';
}
}
$ar = new myclass;
$ar->a(); // TEST
詳細については、クラスとオブジェクトを参照してください。
匿名であるかどうかにかかわらず、コールバック関数があるため、そのように処理する必要があります。例えば:
<?php
$ar = (object) array(
'a' => function(){
echo 'TEST';
}
);
call_user_func($ar->a);
?>
何らかの理由で、あなたのようにクロージャを実行することはおそらくないようです。コードを変更して別の変数を関数に設定すると、次のように呼び出すことができます。
$ar = (object) array('a'=>function(){
echo 'TEST';
});
$a = $ar->a;
$a();
これは解決策ではありません。しかし、私が見ることができることから、これはPHP5.3のバグまたは制限のようです。
これを試すときは5.3.5を使用しています。
関数a()
はプロパティa
以外にないので、で呼び出す必要があります$ar->a
。
とにかく、私はそれがあなたがそれを期待するように働くだろうとは思わない。
編集:
ÁlvaroG。Vicarioが提案したように、関数を呼び出さないでcall_user_funcecho
を使用する必要があります。そうすれば、正しく機能します。
または、それを楽しむために、次のようなことを行うことができます-
<?php
$ar = new stdClass;
$ar->a = function($to_echo){ echo $to_echo; };
$temp = $ar->a;
//[Edit] - $ar->a("hello"); // doesn't work! php tries to match an instance method called "func" that is not defined in the original class' signature
$temp("Hey there");
call_user_func($ar->a("You still there?"));
?>