双引号内的变量

时间:2012-12-27 19:21:27

标签: php variables syntax

哪种语法正确?

$current_renewal_date = $wpdb->get_results(
                    "
                    SELECT expiry_date
                    FROM bid_tag
                    WHERE id = $renewal_tag_id
                    LIMIT 1
                    "
                );

OR

$current_renewal_date = $wpdb->get_results(
                    "
                    SELECT expiry_date
                    FROM bid_tag
                    WHERE id = {$renewal_tag_id}
                    LIMIT 1
                    "
                );

4 个答案:

答案 0 :(得分:1)

他们都是正确的*和同等的。当您只是插入变量而不访问数组中的元素时,大括号是可选的。

*请使用参数化查询

答案 1 :(得分:1)

两者都是正确的。后者仅用于避免歧义,如果您想引用$foo而不是$foobar

"{$foo}bar"

答案 2 :(得分:0)

我不知道你是否真的可以说有一个正确的形式将一个变量放在一个字符串中,但最灵活且肯定会工作的是:

$current_renewal_date = $wpdb->get_results(
                    "
                    SELECT expiry_date
                    FROM bid_tag
                    WHERE id = ".$renewal_tag_id."
                    LIMIT 1
                    "
                );

使用此语法至少有2个好处,而不是仅仅将变量放在字符串中。

可变误解

1)当您将变量放在字符串中时,如果需要将变量与其他文本混合,则可能会遇到问题。

示例:

$string = "My ID is AB$variableCD";

变量是什么?是$变量?是$ variableC吗?还是$ variableCD?对于您正在使用的语法,有许多解释。

时不会发生这种情况
$string = "My ID is AB".$variable."CD";

数组用法

2)当你在字符串

中混合时,你不能轻易使用具有数组索引的变量

示例:

$string = "The largest country is $options[countries in the world][$index]";

会得到你* PHP Parse错误:语法错误,意外T_ENCAPSED_AND_WHITESPACE,期待']'*

使用以下内容时可以完美运行:

$string = "The largest country is ".$options['countries in the world'][$index];

还有一点额外的不是语法问题......

3)实际上有一个性能优势,那就是为你的字符串使用'而不是'的可能性。使用'使字符串文字,也就是说,它不会被解析,这会导致性能提升处理大字符串。

$string = 'hello';

而不是

$string = "hello";

答案 3 :(得分:0)

他们都工作。首选方法是使用预准备语句和绑定参数。