在 PHP 中,当您编写一个等于用重音符包裹的字符串的变量集时,它会像在shell_exec()
命令中一样被执行。PHP 中的重音符号 (`)(不是单引号)代表什么?
所以,在 php 中你可以做各种各样的事情来将字符串与变量等结合起来,当使用 ` 而不是 ' 或 " 时我能做什么和不能做什么?
在 PHP 中,当您编写一个等于用重音符包裹的字符串的变量集时,它会像在shell_exec()
命令中一样被执行。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
。
对于解析器来说,用反引号包裹的字符串等价于包含变量的字符串,例如"hello $world"
. hello
字符串(部分)的文字/常量部分是T_ENCAPSED_AND_WHITESPACE
.
因此,要回答您的问题,您可以对包含变量的字符串执行任何操作,您可以对包含在反引号中的字符串执行任何操作。
那为什么T_ENCAPSED_AND_WHITESPACE
?可能是因为就像包含变量的字符串一样,它的值是在运行时确定的。而 a T_CONSTANT_ENCAPSED_STRING
(一个普通的文字字符串)在解析器的眼中有点像一个常量。