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

标签 php string shell backticks

在 PHP 中,当您编写一个 set a variable 等于一个用重音符包裹的字符串时,它会像在 shell_exec() 命令中一样执行。 What does the grave accent symbol (`) ( not single quote) represent in PHP?

因此,在 php 中,您可以做各种事情来将字符串与变量等结合起来,当使用 ` 而不是 ' 或 "时,我能做什么和不能做什么?

最佳答案

在 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(普通文字字符串)在解析器眼中有点像常量。

关于php - 使用反引号(重音符)时字符串操作的规则是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10821933/

相关文章:

php - 如果用户从输入类型=文件上传图像,则传递路径,否则传递 img src 路径。

php - MeekroDB - 如何安全地传递 ORDER BY 字段名称和参数?

php - 使用 php 同步电话簿

c# - 无法识别 Guid 格式

bash - 检测空命令

php - UserFrosting 和 AWS SDK

C 结构 : Printing a string member produces weird results

c++ 何时返回 const char* 而不是 std :string

php - 从 PHP 调用的 shell 脚本问题

c - C shell 管系统