関数の場合は関数名を文字列変数に代入するだけですが、クラス メソッドの場合はどうすればよいでしょうか?
$func = array($this, 'to' . ucfirst($this->format));
$func(); // fails in PHP 5.3
これはうまくいくようです:
$this->{"to{$this->format}"}();
しかし、私には長すぎます。この関数を何度も呼び出す必要があります...
それは本当に機能ではありませんか?関数に標準的な方法を使用しないのはなぜですか?
function func() {
$func = array($this, 'to' . ucfirst($this->format));
return $func;
}
次に、それを出力します
func();
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()
.
変数関数が長すぎるとはどういう意味ですか?
使用できます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);
これは少し短いです。