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

Kri*_*ian 8 php string shell backticks

在PHP中,当你编写一个变量等于包含在严重重音符号中的字符串时,它会像在shell_exec()命令中一样执行.在PHP中,重音符号(`)(不是单引号)代表什么?

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

jnr*_*bsn 7

在PHP中,该字符称为反引号运算符.

用反引号包装的文字字符串是一个T_ENCAPSED_AND_WHITESPACE标记.您可以通过运行以下内容来确认:

print_r(token_get_all('<?php `uname`;'));
Run Code Online (Sandbox Code Playgroud)

这给你这个:

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

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

    [3] => `
    [4] => ;
)
Run Code Online (Sandbox Code Playgroud)

然后运行token_name(313)给你T_ENCAPSED_AND_WHITESPACE.

解析器,包裹在反引号字符串相当于一个与变量的原因字符串喜欢"hello $world".字符串(hello部分)的文字/常量部分是T_ENCAPSED_AND_WHITESPACE.

因此,要回答您的问题,您可以对包含变量的字符串执行任何操作,您可以对包含在反引号中的字符串执行变量.

为什么T_ENCAPSED_AND_WHITESPACE呢?可能,因为像包含变量的字符串一样,它的值是在运行时确定的.而T_CONSTANT_ENCAPSED_STRING(正常的文字字符串)有点像解析器眼中的常数.