6

在 PHP 7.0 中:

$a = 'this';
return isset( $$a );
// returns true

但在 PHP 7.1 中:

$a = 'this';
return isset( $$a );
// returns false

有谁知道为什么会这样?

4

1 回答 1

7

这与 7.1 中的此更改有关:

不一致的修复$this

虽然$this在 PHP 中被认为是一个特殊变量,但它缺乏适当的检查以确保它没有被用作变量名或重新分配。这现在已经得到纠正,以确保$this不能是用户定义的变量、重新分配给不同的值或被全球化。

http://php.net/manual/en/migration71.other-changes.php#migration71.other-changes.inconsistency-fixes-to-this

这个 RFC更详细地解释了它,尽管它也说:

$this禁用通过间接重新分配的能力$$

尝试$this通过$$assignment 重新分配将导致抛出 Error 异常。

$a = "this";
$$a = 42; // throw new Error("Cannot re-assign $this")

仍然可以$this通过$$.

(强调我的。)

isset似乎有它自己的特殊处理$$$this禁止它看到它。我不确定这是有意的还是这些变化的副产品。

于 2018-06-25T11:54:13.430 回答