1

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) シンタックス プロセッサでバグを見つけたのですか?

4

1 に答える 1

2

これを「バグ」と呼ぶかどうかはわかりませんが、PHP 7 より前の PHP の特異性であることは確かです。これと同様の問題のクラス全体は、Uniform Variable Syntax RFCによって対処されました。

于 2016-08-14T01:16:34.220 に答える