2016-10-01 8 views
0

(タイトルの)これら2つの違いは何ですか?

{$するvar}の最初の 'ここで文字列' を使用VS {$するvar}の使用である$のvar.'another列」

例:

<?php echo "Hello {$var}!;" ?> 
'文字列' の$再びvar.'string

例:

<?php echo '<strong style="color:#009900;">' . $username . ' is OK</strong>'; ?> 
+2

デュープ:http://stackoverflow.com/両方の場合において

$foo = new StdClass; $foo->bar = new StdClass; $foo->bar->baz = 'qux'; echo "hi $foo->bar->baz mom"; // prints: PHP catchable: Object of StdClass could not be converted to string echo "hi {$foo->bar->baz} mom"; // prints: hi qux mom 

、非ブレースバージョンは等価として実行/解析されます質問/ 5571624/what-does-in-php-syntax – nogad

答えて

0

コードの下に中括弧について少し良く理解できるようになります。

(PHP 5.5.12でテストコード)ここでより多くの問題は、コードをより読みされていると、連結演算子を使って書くよりも良く見える何

<?php 
     $p = 5; 
     $r = 6; 
     echo "{$p}{$r}"; //56 
     $a = "string"; 
     echo ".$a."; //.string. 
     printf(".$b.");//undefined variable 
     echo "{}"; //{} 
     echo "$c"; //undefined variable 
     echo "{{$a}}"; //{string} 
     echo "{{$b}}"; //undefined variable 
     class a { 
      static $x = "xyz"; 
      const x = "cdef"; 
      function b() { 
       return "World"; 
      } 
     static function d(){ 
    return "php"; 
    } 
    } 
    $xyz = "pqrs"; 
    $cdef = "defg"; 
    $c = new a; 
    echo "Hello {$c->b()}.\n"; //Hello world. 
    echo "Hello {a::d()}"; //{a::d()} 
    echo "Hello {${a::d()}}"; //undefined variable 
    echo "Hello {${a::$x}}"; //Hello pqrs 
    echo "Hello {${a::x}}"; //Hello defg 
    function g(){ 
    return "gun"; 
    } 
    echo "{g()}"; //{g()} 
    ?> 

(。)。また、複雑な表現を可能にしているため、複雑な(中括弧)構文とも呼ばれています。 hereから理解できます。これは基本的には好きな文章スタイルです。

0

これは「複合(中括弧)構文」と呼ばれます。そして、二重引用符で囲まれた文字列内の変数式を具体的に示すために使用されます。

あなたが言及したもう1つは、可変引用符で囲まれた文字列の変数解析から抜け出します。別のアドオンとして

http://php.net/manual/en/language.types.string.php

0

あなたは" -quoted文字列内の多次元配列やオブジェクトを使用したい場合は、{}表記が必要となります。例えば

$foo[1][2] = 'bar'; 

echo "hi $foo[1][2] mom"; // prints: hi Array[2] mom 
echo "hi {$foo[1][2]} mom"; // prints: hi bar mom 

PHPのパーサは「貪欲」ではない、そしてそれは、配列変数の最初の[]の鍵を見つけたら、それはより多くのキーのために、さらにスキャンしません。つまり、子配列のキーは無視され、文字列コンテキストの配列を出力します。これは単に文字通りの単語のArrayです。オブジェクトの

同上:

echo "hi " . $foo[1] . "[2] mom"; 
echo "hi " . $foo->bar . "->baz mom"; 
関連する問題