编辑:此行为可通过查询全局变量重现。
我有以下内容:
$_SESSION['query_key'] = $_GET['query_key'];
print($query_key);
比。
$_SESSION['query_key'] = clone $_GET['query_key'];
print($query_key);
前者打印出 $query_key 的值,而后者什么也不打印。克隆的这种奇怪的副作用是什么?
你一定在用你的代码做一些很奇怪的事情。 克隆用于对象。除非您将对象填充到 $_GET 中,否则该代码将导致致命错误(或旧 PHP 版本中的警告)。
@Michael Haren - clone 实际上对一个对象进行了浅拷贝,也就是说,它复制了所有属性,但是如果一个属性是对另一个对象的引用,它将复制引用,而不是克隆另一个对象。
我知道这并没有真正具体回答这个问题,但根据您对 Roborg 的评论,我认为这不是您在其他问题(此处)中提到的问题的好解决方案 - 您最好禁用 register_globals
只要你这样做
$_SESSION['query_key'] = 'anything'
$query_key 将是对 的引用 $_SESSION['query_key']
,因此克隆您放入其中的内容不会有任何区别
编辑
克隆仅适用于对象,因此您无法克隆字符串。这将导致致命错误。我认为,如果您查看日志或将 display_errors 设置为“开”,您将收到错误而不是空白页