快速PHP问题

问题描述:

我有以下摘录:快速PHP问题

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

的问题是,"{$last_db_error}"不显示,除非我只使用$last_db_error,不带引号和括号。 我在这里错过了什么吗?上面的语法不正确吗?

+0

你确定它不工作?它适用于我的机器。 我应该向您寄送我的机器吗?大声笑。 – lemon 2009-10-15 08:11:31

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

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; 
} 

而且只要你有大量的文字处理,恳请您使用PHP alternative syntax。 E.G:

<?php if (empty($last_db_error)): ?> 
     OK 
<?php else : ?> 
     Error activating subscription. 
     <?php echo $last_db_error; ?> 
<?php endif; ?> 
+0

字符串插值非常合适。在我看来,“缓慢解析”和“不能用单引号”是无效的论点。 – 2009-10-15 07:57:17

+0

而且,我确定OP知道你所说的一切。他实际上对为什么他的代码无法正常工作感兴趣,因为它是有效的PHP。我相信ChrisRamakers可能已经发现了这个问题。 – 2009-10-15 07:58:37

+0

@Ionut G. Stan:好吧,如果错误prones和性能低效不是你的有效论据,那么是什么?但的确,ChrisRamakers比我的答案要好。 – 2009-10-15 08:01:29

只需使用

echo $last_db_error; 

此处不需要休息。

花括号用于评估更复杂的变量名称。如果你想在输出大括号,然后尝试逃避他们,就像这样:

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

恩?双引号字符串中的大括号对输出这样的变量是完全合法的,不需要转义,除非实际上想要打印括号。 – ChrisR 2009-10-15 07:49:08

+0

我以为OP希望输出包含大括号。似乎他没有。 – Marius 2009-10-15 07:51:50

为$ last_db_error一个字符串或对象?如果它是一个字符串,它应该在使用大括号的双引号之间正确显示(就像你上面发布的那样),所以代码看起来是正确的。

在else语句中放置var_dump($last_db_error)并查看它输出的内容。

+1

似乎字符串插值可以与具有'__toString'方法的用户定义对象一起使用。至少在PHP 5.2.11中。 – 2009-10-15 08:08:44

对于我来说,好的工作:

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

这表明我 LLLLLLLLLLLL

也许你正在使用某种形式的模板系统,它解析内部{ .... }一切吗?

的simpliest方法是:

echo $last_db_error; 

对于某些情况下,尝试这些:

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

Here is a good article regarding php variable names: curly braces