2016-10-01 6 views
0

В чем разница между этими двумя (в заголовке)?

Первое использование {$ вар} против использования 'строки здесь' $ var.'another строку»

Пример {$ вар}:.

<?php echo "Hello {$var}!;" ?> 

Пример 'строка' $ var.'string снова:.

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

боян: http://stackoverflow.com/ вопросы/5571624/что-делает-средней-в-PHP-синтаксис – 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

Это называется «сложный (фигурный) синтаксис». И используется, чтобы конкретно указать переменное выражение в строке с двойными кавычками.

Другой, который вы упомянули, выходит из разбора переменных в строке с двойными кавычками.

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.

То же относится к объектам:

$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 

В обоих случаях не-приготовился версии будут анализироваться/выполнены как эквивалент:

echo "hi " . $foo[1] . "[2] mom"; 
echo "hi " . $foo->bar . "->baz mom";