这两者(标题中)的区别是什么?
第一个是使用{$ var}与使用'string here'。$ var.another string'
{$ var} 的例子:
<?php echo "Hello {$var}!;" ?>
'string'的示例。$ var .tring again':
<?php echo '<strong style="color:#009900;">' . $username . ' is OK</strong>'; ?>
答案 0 :(得分: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你可以理解,这基本上是你应该喜欢的写作风格。
答案 1 :(得分:0)
这称为&#34;复杂(卷曲)语法&#34;。并且用于在带有双引号的字符串中专门指示变量表达式。
你提到的另一个退出了双引号字符串中的变量解析。
答案 2 :(得分:0)
作为另一个附加组件,如果要在{}
引用的字符串中使用多维数组或对象,则需要"
表示法。 e.g。
$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";