1

静的関数を変数に割り当てる方法、またはこれを他の方法で実行する方法はありますか?

class my_class{
     public static function my_method($a){
        return $a;
     }
}

$some_func = my_class::my_method;

$someAnonFunc = function($a) use ($some_func){
    return $some_func($a);
}

$inst = new SomeOtherClass(); //Defined somewhere else, in some other file

$inst->someMethod($a, $someAnonFunc);

この時点で、次のようになります。

致命的なエラー:未定義のクラス定数'my_method'

4

3 に答える 3

3

関数はPHPのファーストクラスではありません..文字列はファーストクラスです。構文を1つの単位としてcall_user_func保持したい場合は、次を使用する必要があります。::

$some_func = 'my_class::my_method';
$someAnonFunc = function ($a) use ($some_func) {
   return call_user_func($some_func, $a);
}

コロンは関数名の一部として扱われるため、実行しよう$some_func()としても機能しません。

于 2012-09-10T21:12:14.760 に答える
1

私があなたの質問を正しく理解しているかどうかはわかりませんが、 call_user_funcを探していますか?

静的メソッドを呼び出すことができます

call_user_func(array('myclass', 'my_method'), $arg1, $arg2, ...);
于 2012-09-10T21:13:37.057 に答える
0

これを自分で試したことはありませんが、試してみてください

$some_func = 'my_class::my_method';

(たとえば、クラス/メソッドを文字列として割り当てます)。

これはそのままでは機能しないかもしれませんが、私は次のようなことを知っています:

$x = 'mysql_real_escape_string';

$sql = "INSERT ... VALUES({$x($_GET['post'])})";

します。醜いですが、動作します。

于 2012-09-10T21:11:11.037 に答える