PHP 和变量变量 ($$) 语法

PHP and variable variables ($$) syntax

提问人:kurama 提问时间:6/4/2016 最后编辑:miken32kurama 更新时间:6/4/2016 访问量:105

问:

在升级到 PHP 7 之前,我有这个代码,它返回了 true

var_dump(isset($$_SESSION['payment']) );
var_dump(is_object($$_SESSION['payment'])); 
var_dump($_SESSION['payment']); // string 'moneyorder'

升级到 PHP 7 后,我在类中重写了相同的代码,但现在它返回 false

var_dump(isset(${$_SESSION['payment']})); 
var_dump(is_object(${$_SESSION['payment']}));
var_dump($_SESSION['payment']); // string 'moneyorder'

你知道为什么吗?

谢谢

php 变量

评论

0赞 miken32 6/4/2016
显示什么?var_dump($_SESSION["payment"])
0赞 kurama 6/4/2016
只是一个精度:以前数据在一个简单的文件中,现在相同的数据在类中。
0赞 kurama 6/4/2016
var_dump($_SESSION['付款']);见上文
0赞 miken32 6/4/2016
那么你的原始代码是否在 PHP 7 中运行?因为你的问题似乎应该说“升级到 PHP 7 后,重写一些代码行,并将它们放在一个类中,它的工作方式就不同了。
0赞 Barmar 6/4/2016
我建议你重新设计你的代码,这样你就不需要变量了。你对它们所做的任何事情都应该使用关联数组来完成。

答:

1赞 miken32 6/4/2016 #1

请注意,超级全局变量的 PHP 文档包含以下警告:

注意:变量

超全局变量不能用作函数或类方法中的变量。

改为将其保存到局部变量中:

$payment = $_SESSION['payment'];
var_dump(isset(${$payment})); 
var_dump(is_object(${$payment}));