PHP 5.3 以降では、変数をクラス名として使用できます。これは、オブジェクトのインスタンス化だけでなく、静的メソッドにも使用できます。
$className = 'My\Name\Spaced\Thing';
$thing = $className::foo('hello world');
ただし、実際の変数の代わりに関数またはメソッドの戻り値を使用しようとすると、エラーが発生します。
function getClassName()
{
return 'My\Name\Spaced\Thing';
}
// Raises "syntax error, unexpected '::' (T_PAAMAYIM_NEKUDOTAYIM)"
$thing = getClassName()::foo('hello world');
一方、これは問題なく機能します。
$className = getClassName();
$thing = $className::foo('hello world');
何を与える?PHP の (5.6) シンタックス プロセッサでバグを見つけたのですか?