5

最近、php のドキュメントを読んでいて、文字列セクションで興味深いメモを見つけました。

{$} 内の関数、メソッド呼び出し、静的クラス変数、およびクラス定数は、PHP 5 以降で機能します。ただし、アクセスされる値は、文字列が定義されているスコープ内の変数の名前として解釈されます。関数やメソッドの戻り値、またはクラス定数や静的クラス変数の値にアクセスする場合、単一の中括弧 ({}) を使用しても機能しません。

www.php.net/manual/en/language.types.string.phpを参照してください。

オブジェクトのメソッド呼び出しによって返される値を取得するためにカーリー構文を使用することはできません。次のコードを試してみたところ、問題なく動作したため、マニュアルの間違いですか、それとも誤解しました。

<?php
class HelloWorld
{
    public static function hello() 
    {
        echo 'hello';
    }
}
$a = new HelloWorld();

echo "{$a->hello()} world";
4

2 に答える 2

3

PHPドキュメントによると

関数やメソッドの戻り値、またはクラス定数や静的クラス変数の値へのアクセスには機能しません

$a->hello()で静的メソッドを呼び出す方法ではPHPなく、定数や静的クラス変数でもありません。これが意味することです:

class HelloWorld {
    const A = "A";//                <---- You can not use it for this 
    public static $B = "B";         <---- or this  

    public static function hello() {
        echo 'hello';
    }
}


$a = new HelloWorld();
$A = "{HelloWorld::A} world";       <-------- Not Work
$B = "{HelloWorld::$B} world";      <-------- Not Work
$C = "{HelloWorld::hello()} world"; <-------- Not Work

今試したら

$A = "X";    // If you don't define this it would not work
$B = "Y" ;   //<------------- -^

echo "{${HelloWorld::A}} world";  
echo "{${HelloWorld::$B}} world"; 

出力

X world           <--- returns X world instead of A
Y world           <--- returns Y world instead of B
于 2012-10-20T23:09:23.043 に答える
0

その説明から私が理解しているのは、ストレスがかかっているということです

(…)重中括弧の使用…</p>

したがって、そこの例では、次のように言いたいと思います。

echo "I'd like an {$beers::$ale}\n";動作しないため、単一の中括弧。
そのため、二重中括弧を使用する必要があります。最初の例では静的出力が返され、2 番目の例では最終的な出力が返されます。

echo "I'd like an {${beers::$ale}}\n";
                  ^ ^           ^^
于 2012-10-20T23:09:18.503 に答える