使用反引号(严重重音)时字符串操作的规则是什么?

时间:2012-05-30 18:14:08

标签: php string shell backticks

在PHP中编写一个变量等于包含在严重重音符号中的字符串时,它会像在shell_exec()命令中一样执行。 What does the grave accent symbol (`) ( not single quote) represent in PHP?

所以,在php中你可以做各种各样的事情来组合字符串和变量等,当我使用`而不是'或“?

时,我可以做什么,不能做什么?

1 个答案:

答案 0 :(得分:7)

在PHP中,该字符称为反引号操作符。

反引号中包含的文字字符串是T_ENCAPSED_AND_WHITESPACE标记。您可以通过运行以下内容来确认:

print_r(token_get_all('<?php `uname`;'));

给你这个:

Array
(
    [0] => Array
        (
            [0] => 367
            [1] => <?php 
            [2] => 1
        )

    [1] => `
    [2] => Array
        (
            [0] => 313
            [1] => uname
            [2] => 1
        )

    [3] => `
    [4] => ;
)

然后运行token_name(313),它会为您提供T_ENCAPSED_AND_WHITESPACE

对于解析器,用反引号包装的字符串相当于string with variables in it "hello $world"。字符串的文字/常量部分(hello部分)是T_ENCAPSED_AND_WHITESPACE

所以要回答你的问题,你可以对包含变量的字符串做任何事情,你可以用反引号包裹的字符串做。

那么为什么T_ENCAPSED_AND_WHITESPACE?可能,因为像包含变量的字符串一样,它的值是在运行时确定的。而T_CONSTANT_ENCAPSED_STRING(一个普通的文字字符串)在解析器眼中就像一个常数。