PHP 5.3并通过引用分配新的返回值
通过引用分配新的返回值在
PHP 5.3中已经为
deprecated.因此,
$obj =& new Foo(); 现在抛出一个E_DEPRECATED错误. 当将具有大量旧版代码的大型应用程序升级到5.3时,会导致大量不需要的通知. 作为这个问题的潜在解决方案,我正在考虑使用正则表达式来查找和替换所有=& new with = new.例如,以下将找到所有的PHP文件,并且清除所有的实例=&新: find ./ -name '*.php' | xargs perl -p -i -e 's/=(s*)&(s*)?newb/= new/g' 寻找以下问题的答案: >它会正常工作吗?我遇到什么潜在的问题? 我怀疑这将工作正常,但寻找边缘的情况下,我可能遇到麻烦.是的,我知道我可以更改错误报告设置.但我不想隐藏通知,我想修复它们.
你的感觉是对的它通常工作正常,但有边缘的情况下它没有.
使用=&有以下差异: > =&将尝试使右侧产生参考; =不会 – 即使右侧能够产生一个引用,就像通过引用返回的函数一样. 在这种情况下,第一个差异和第二个差异的一半是无关紧要的.在赋值后,只有一个变量带有新对象*的值,而单个元素的引用集是没有意义的.然而,事实上=&打破以前的参考集是重要的: <?php $g = 4; $v =& $g; $v = new stdclass(); var_dump($g); // object(stdClass)#1 (0) { } $g = 4; $v =& $g; $v =& new stdclass(); var_dump($g); // int(4) *除非构造函数泄漏引用,否则即使泄漏,构造函数中的$也可能是一个不同的变量,即使它指向同一个对象.所以我怀疑由于这个原因可以观察到行为差异. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |