在 PHP 7.0 中:
$a = 'this';
return isset( $$a );
// returns true
但在 PHP 7.1 中:
$a = 'this';
return isset( $$a );
// returns false
有谁知道为什么会这样?
这与 7.1 中的此更改有关:
不一致的修复
$this
虽然
$this
在 PHP 中被认为是一个特殊变量,但它缺乏适当的检查以确保它没有被用作变量名或重新分配。这现在已经得到纠正,以确保$this
不能是用户定义的变量、重新分配给不同的值或被全球化。
这个 RFC更详细地解释了它,尽管它也说:
$this
禁用通过间接重新分配的能力$$
尝试
$this
通过$$
assignment 重新分配将导致抛出 Error 异常。$a = "this"; $$a = 42; // throw new Error("Cannot re-assign $this")
仍然可以
$this
通过$$
.
(强调我的。)
isset
似乎有它自己的特殊处理$$
,$this
禁止它看到它。我不确定这是有意的还是这些变化的副产品。