2016-05-13 13 views
10

実際には変数名をPHPに明確にする必要があることがあります。私は同僚と私が少し違ったやり方で行っていることを発見しました。 は、変数$fooを持っていたし、私の同僚が(それを簡単にするために少し不自然な例)

return "<input type='hidden' name='{$foo}_constant_string' value='true' />"; 

を使用しているのに対し、 を追加_constant_stringと私は

return "<input type='hidden' name='${foo}_constant_string' value='true' />"; 

を使用していたことを出力したかったと言います。

私のクイックテストでは明らかな違いはありませんが、私は不思議です:違いはありますか?どちらか一方を好む理由はありますか?

編集: 私の例では上記の文字列を使用しましたが、私の質問はより一般的でした。エスケープに中括弧を使うことができると知っていましたが、(どちらの場合でも)2つの使用方法の違いがあるかどうかの特定の点は見つかりませんでした。私は答えを得た:文字列(これは "重複"のポストについて)ではないが、配列とオブジェクトに対するものである(感謝@dragoste)。

+0

次のチェックをsame.Pleaseされます重複としてマークされています。その男はタイトルを読んでいないかもしれない。 – revo

答えて

7

それはそうです、任意のPHPのバージョンに違いはありません

$foo = 'test';  
    var_dump("$foo"); 
    var_dump("{$foo}"); 
    var_dump("${foo}"); 

テスト:私はそれをより読みだと、他の構文はない他の多くのケースでうまくいくと思うので、

https://3v4l.org/vMO2Dは、とにかく私は"{$foo}"を好むん。

例としてのオブジェクトのプロパティのアクセスを試してみましょう:

var_dump("$foo->bar"); //syntax error 
var_dump("{$foo->bar}"); // works great 
var_dump("${foo->bar}"); //syntax error 

同じ場合は配列です。

http://www.php.net/manual/en/language.types.string.php#language.types.string.parsing.complex

7

いいえ、違いはありません。

// Works, outputs: This is fantastic 
echo "This is {$great}"; 
echo "This is ${great}"; 

Php manual

Answer on stackoverflow

もう一つの方法は、変数のためにそれを使用します。

$foo = 'test'; 
$test = 'foo'; 
var_dump("{${$foo}}"); //string(3) "test" 

または配列のために:

$foo = ['foo','test']; 
var_dump("{$foo[0]}"); //string(3) "foo" 
var_dump("${foo[1]}"); //string(3) "test" 
0

次の文の間に違いはありません -

echo "This is {$great}"; 
echo "This is ${great}"; 

両方のステートメントの出力が問題である理由かしら例 -

$great = 'answer'; 
echo "This is {$great}"."\n"; 
echo "This is ${great}"; 

Output:- 

This is answer 
This is answer 
関連する問題