PHP花括号字符串语法问题

4

我正在运行PHP 5.3.0。我发现花括号字符串语法只有在表达式的第一个字符是$时才起作用。是否有办法包含其他类型的表达式(函数调用等)?

简单示例:

<?php
$x = '05';
echo "{$x}"; // works as expected
echo "{intval($x)}"; // hoped for "5", got "{intval(05)}"

2
是的,但为什么?为了制作美味的意大利面吗? - Your Common Sense
5个回答

3
<?php
$x = '05';
echo "{$x}";
$a = 'intval';
echo "{$a($x)}";
?>

2
聪明……如果我不对那种气味过敏,我会使用它的 :) - zildjohn01

2
请看这个链接 LINK 代码示例:
Similarly, you can also have an array index or an object property parsed. With array indices, the closing square bracket (]) marks the end of the index. For object properties the same rules apply as to simple variables, though with object properties there doesn't exist a trick like the one with variables.

<?php
// These examples are specific to using arrays inside of strings.
// When outside of a string, always quote your array string keys 
// and do not use {braces} when outside of strings either.

// Let's show all errors
error_reporting(E_ALL);

$fruits = array('strawberry' => 'red', 'banana' => 'yellow');

// Works but note that this works differently outside string-quotes
echo "A banana is $fruits[banana].";

// Works
echo "A banana is {$fruits['banana']}.";

// Works but PHP looks for a constant named banana first
// as described below.
echo "A banana is {$fruits[banana]}.";

// Won't work, use braces.  This results in a parse error.
echo "A banana is $fruits['banana'].";

// Works
echo "A banana is " . $fruits['banana'] . ".";

// Works
echo "This square is $square->width meters broad.";

// Won't work. For a solution, see the complex syntax.
echo "This square is $square->width00 centimeters broad.";
?>

花括号有不同的用途,但它的功能是有限的,这取决于你如何使用它。


2

不,只有各种形式的变量可以使用变量替换进行替换。


0
<?php
class Foo
{
    public function __construct() {
        $this->{chr(8)} = "Hello World!";
    }
}

var_dump(new Foo());

0
通常情况下,您不需要在变量周围加上大括号,除非您需要强制PHP将某些内容视为变量,否则其正常解析规则可能不会这样做。其中一个例子是多维数组。PHP的解析器对于决定什么是变量和什么不是变量并不贪心,因此需要使用大括号来强制PHP查看其余的数组元素引用:
<?php

$arr = array(
    'a' => array(
         'b' => 'c'
    ), 
);

print("$arr[a][b]"); // outputs:  Array[b]
print("{$arr[a][b]}"); // outputs: (nothing), there's no constants 'a' or 'b' defined
print("{$arr['a']['b']}"); // ouputs: c

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接