快速PHP问题

快速PHP问题,php,syntax,Php,Syntax,我有以下摘录: if (empty($last_db_error)) { echo "OK"; } else { echo "Error activating subscription."; echo "{$last_db_error}"; } 问题是没有显示“{$last\u db\u error}”,除非我只使用$last\u db\u error,没有引号和括号。 我是不是遗漏了什么?上述语法是否正确?在这种情况下,括号和引号是无用的 if (empty($las

我有以下摘录:

if (empty($last_db_error)) {
    echo "OK";
} else {
    echo "Error activating subscription.";
    echo "{$last_db_error}";
}
问题是没有显示
“{$last\u db\u error}”
,除非我只使用
$last\u db\u error
,没有引号和括号。
我是不是遗漏了什么?上述语法是否正确?

在这种情况下,括号和引号是无用的

if (empty($last_db_error)) {
    echo "OK";
} else {
    echo "Error activating subscription.";
    echo $last_db_error;
}
我会把工作做好的

顺便说一句,即使您可以在PHP中输入
$vars
内部引号,也不建议这样做,因为:

  • 它只适用于双引号,单引号将显示变量名称,这将导致错误
  • 它会减慢字符串解析的速度
使用点运算符连接变量更合适:

if (empty($last_db_error)) {
    echo "OK";
} else {
    echo "Error activating subscription.\n".
          $last_db_error;
}
一旦你有很多文本要处理,我敦促你使用。例如:


好啊
激活订阅时出错。
只需使用

echo $last_db_error; 

其余的在这里不需要。

花括号用于计算更复杂的变量名。如果要在输出中使用花括号,请尝试对其进行转义,如下所示:

if (empty($last_db_error)) {
    echo "OK";
} else {
    echo "Error activating subscription.";
    echo "\{$last_db_error\}";
}

$last\u db\u错误是字符串还是对象?如果它是一个字符串,则应该使用大括号(如上面所述)在双引号之间正确显示,以便代码看起来正确

在else语句中放置一个
var\u dump($last\u db\u error)
,查看它的输出。

对我来说,它工作正常:

<?php
$last_db_error = "LLLLLLLLLLLL";
echo "{$last_db_error}";

也许您正在使用某种模板系统,它可以解析
{….}
中的所有内容。

最简单的方法是:

echo $last_db_error;
对于某些情况,请尝试以下方法:

 echo "${last_db_error}";
 echo ${'last_db_error'};

嗯?双引号字符串中的花括号对于这样的输出变量是完全合法的,不需要转义,除非您确实想要打印括号。我想OP希望输出包含花括号。似乎他没有。字符串插值非常合适。在我看来,“减慢解析速度”和“不能使用单引号”都不是有效的论据。而且,我相信OP知道你所说的一切。他实际上很感兴趣为什么他的代码不起作用,因为它是有效的PHP。我相信ChrisRamakers可能已经发现了这个问题。@Ionut G.Stan:好吧,如果错误倾向和性能低效对你来说不是有效的论据,那是什么?但事实上,ChrisRamakers有一个比我更好的答案。顺便说一句,如果chris是对的,这只会增加一个事实,那就是它很容易出错。使用“.”会引发错误。什么是重要的?对代码进行良好的结构化,这样,如果我在字符串中有一个带有单引号的变量,那么为了修复错误,我必须更改一个地方。请停止讨论字符串插值的优化。我更喜欢可读的代码和更多的时间来优化数据库查询。字符串插值似乎适用于具有
\uuu toString
方法的用户定义对象。至少在PHP5.2.11中。你确定它不工作吗?它在我的机器上工作。我应该把我的机器运给你吗?英雄联盟
 echo "${last_db_error}";
 echo ${'last_db_error'};