0

関数の場合は関数名を文字列変数に代入するだけですが、クラス メソッドの場合はどうすればよいでしょうか?

$func = array($this, 'to' . ucfirst($this->format));
$func(); // fails in PHP 5.3

これはうまくいくようです:

$this->{"to{$this->format}"}();

しかし、私には長すぎます。この関数を何度も呼び出す必要があります...

4

3 に答える 3

1

それは本当に機能ではありませんか?関数に標準的な方法を使用しないのはなぜですか?

function func() {
$func = array($this, 'to' . ucfirst($this->format));
return $func;
}

次に、それを出力します

func();
于 2013-03-30T20:37:21.167 に答える
1

1 つのオプションは、php のcall_user_func_array();を使用することです。

例:

call_user_func_array(array($this, 'to' . ucfirst($this->format)), array());

スコープ解決演算子selfでキーワードまたはクラス名を使用することもできます。

例:

$name = 'to' . ucfirst($this->format);
self::$name();

className::$name();

ただし、php の変数関数を使用して投稿したものも完全に有効です。

$this->{"to{$this->format}"}();

call_user_func_array()おそらく、変数関数を使用するよりも読みやすいと考えられますが、私が読んだことから (ここのように)、変数関数はcall_user_func_array().

変数関数が長すぎるとはどういう意味ですか?

于 2013-03-30T21:06:37.547 に答える
1

使用できますcall_user_func

class A
{

  function thisIsAwesome()
  {
    return 'Hello';
  }

}

$a = new A;

$awesome = 'IsAwesome';

echo call_user_func(array($a, 'this' . $awesome));

それでもかなり長いですが。あなたはそれを行うためにあなた自身の関数を書くことができます:

function call_method($a, $b)
{
  return $a->$b();
}

$a = new A;

$awesome = 'IsAwesome';

echo call_method($a, 'this' . $awesome);

これは少し短いです。

于 2013-03-30T21:00:43.467 に答える