当前位置: 首页 > 面试题库 >

PHP中字符串的花括号

凤衡
2023-03-14
问题内容

{ }PHP字符串文字中的(花括号)是什么意思?


问题答案:

这是字符串插值的复杂(弯曲)语法。从手册中:

复杂(卷曲)语法

之所以称其为“复杂”,是因为语法复杂,而是因为它允许使用复杂的表达式

可以通过此语法包括具有字符串表示形式的任何标量变量,数组元素或对象属性。只需以与出现在字符串外部相同的方式编写表达式,然后将其包装在{和中即可}。由于{无法转义,因此仅在$紧随其后的才会识别此语法{。使用
{\$得到文字{$。一些示例可以使您清楚:

<?php
// Show all errors
error_reporting(E_ALL);

$great = 'fantastic';

// Won't work, outputs: This is { fantastic}
echo "This is { $great}";

// Works, outputs: This is fantastic
echo "This is {$great}";
echo "This is ${great}";

// Works
echo "This square is {$square->width}00 centimeters broad.";


// Works, quoted keys only work using the curly brace syntax
echo "This works: {$arr['key']}";


// Works
echo "This works: {$arr[4][3]}";

// This is wrong for the same reason as $foo[bar] is wrong  outside a

string.
// In other words, it will still work, but only because PHP first looks
for a
// constant named foo; an error of level E_NOTICE (undefined constant)
will be
// thrown.
echo “This is wrong: {$arr[foo][3]}”;

// Works. When using multi-dimensional arrays, always use braces around

arrays
// when inside of strings
echo “This works: {$arr[‘foo’][3]}”;

// Works.
echo "This works: " . $arr['foo'][3];

echo "This works too: {$obj->values[3]->name}";

echo "This is the value of the var named $name: {${$name}}";

echo "This is the value of the var named by the return value of

getName(): {${getName()}}”;

echo "This is the value of the var named by the return value of

\$object->getName(): {${$object->getName()}}”;

// Won't work, outputs: This is the return value of getName():

{getName()}
echo “This is the return value of getName(): {getName()}”;
?>

通常,此语法是不必要的。例如,这:

$a = 'abcd';
$out = "$a $a"; // "abcd abcd";

行为与此完全相同:

$out = "{$a} {$a}"; // same

因此花括号是不必要的。但是 这个

$out = "$aefgh";

由于没有命名为的变量,根据您的错误级别,将不起作用或产生错误$aefgh,因此您需要执行以下操作:

$out = "${a}efgh"; // or
$out = "{$a}efgh";


 类似资料:
  • 假设一个字符串的格式如下: 我想提取: 什么正则表达式可以用于这样的提取? 我被这个困住了:

  • 上面的正则表达式返回括号之间的文本。 如: 如何重写上面的正则表达式,所以我提供了一个类似的字符串,它将返回。i、 e带括号的部分,其中包含大括号中的字符串。

  • 问题内容: 这个问题看起来很尴尬,但我一直找不到答案。 与下面的C#代码行等效的PHP是什么? 此示例创建一个带有单个Unicode字符的字符串,该字符串的“ Unicode数值”为十六进制的1000(十进制的4096)。 也就是说,在PHP中,如何创建一个具有“ Unicode数值”已知的Unicode字符的字符串? 问题答案: 因为JSON直接支持语法,所以我想到的第一件事是: 另一种选择是使

  • 我一直在仔细阅读这篇SO文章,试图将花括号文字放在我的插值字符串周围。 我对的预期结果是“{foo}”。我曾尝试用反斜杠转义外部的花括号,但这不起作用,我也没想到会这样。我怎么才能在插入的字符串变量周围加上文字花括号?更准确的例子是: 预计:“我想吃一些{foo}。” 实际:“我想吃一些{testString}。” 我怎样才能做到这一点?(我还在和之间尝试了,但没有成功。)

  • 问题内容: 我现在正在使用C#,并且正在使用JSON.Net将JSON字符串解析为C#对象。我的问题的一部分是我得到了一些像这样的字符串: 当我尝试使用进行反序列化时,它将引发异常。 我想知道将这个较大的字符串拆分为较小的json字符串的最佳方法是什么。 我正在考虑遍历字符串并匹配“级别0”的花括号。这似乎是个好主意吗?还是有更好的方法来做到这一点? 问题答案: 您可以将标志设置为true来使用a

  • 问题内容: 我有一个包含标记的字符串列表。 令牌是: {ARG:token_name}。 我也有标记的哈希图,其中key是标记,value是我要用来替换标记的值。 当我使用“ replaceAll”方法时,出现错误: java.util.regex.PatternSyntaxException:非法重复 我的代码是这样的: 并且valueFromHashMap包含{和}。 我将此哈希图作为参数。