В чем разница {$ var} против ‘(string)’. $ Var. ‘(String)’ в переполнении стека

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

Первый — это использование {$ var} против использования ‘string here’. $ Var.’another string ‘

Пример {$ Вар}:

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

Пример ‘string’. $ var.’string again ‘:

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

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()}
?>

Здесь важнее то, что код более читабелен и выглядит лучше, чем при написании с использованием оператора конкатенации (.). А также допускает сложное выражение, поэтому оно также называется сложным (фигурным) синтаксисом. От Вот Вы можете понять, что это в основном стиль письма, который вы предпочитаете.

0

Другие решения

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

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

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

0

Как еще одно дополнение, {} НЕОБХОДИМА, чтобы вы использовали многомерный массив или объект внутри "строка в кавычках. например

$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";
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector