PHP中{$ var} vs'(string)'。$ var。'(string)'的区别是什么?

时间:2016-10-01 05:18:56

标签: php difference

这两者(标题中)的区别是什么?

第一个是使用{$ 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>'; ?>

3 个答案:

答案 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;。并且用于在带有双引号的字符串中专门指示变量表达式。

你提到的另一个退出了双引号字符串中的变量解析。

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

答案 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";