脚本宝典收集整理的这篇文章主要介绍了PHP引用导致数据损坏,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
<?PHP $data = array('a','b','c'); foreach( $data as &$x ) $x = strtoupPEr($x); $exTradata = array('d','e','f'); // actually IT was MysqL cursor while( list($i,$x) = each($exTradata) ) { $data[] = strtoupper($x); } PRint_r($data); ?>
数据被破坏了.所以我明白了
Array ( [0]=>A [1]=>B [2]=> [3]=>D [4]=>E [5] =>F )
代替
Array ( [0]=>A [1]=>B [2]=>C [3]=>D [4]=>E [5] =>F )
当我不使用引用和写
foreach( $data as &$x ) $x = strtoupper($x);
当然,转换不会发生,但数据也不会被破坏,所以我得到了
Array ( [0]=>a [1]=>b [2]=>c [3]=>D [4]=>E [5] =>F )
如果我写这样的代码
<?PHP $result = array(); $data1 = array('a','c'); foreach( $data1 as $x ) $result[] = strtoupper($x); $data2 = array('d',$x) = each($data2) ) { $result[] = strtoupper($x); } print_r($result); ?>
一切都按预期工作.
Array ( [0]=>A [1]=>B [2]=>C [3]=>D [4]=>E [5] =>F )
当然,我复制数据解决了这个问题.但我想了解这个参考的奇怪问题是什么,以及如何避免这样的麻烦.也许在代码中使用PHP引用通常是不好的(就像很多人说的关于C指针)?
$a = 1; $b = 2; $r = &$a; $r = $b; echo $a; // will output '2'
这对于分配是正确的,但对于未设置的调用不是真的,它不会破坏底层对象,而是打破引用和指向对象之间的链接.
$a = 1; $b = 2; $r = &$a; unset($r); //! $r = $b; echo $a; // will output '1'
这种参考行为在某些情况下很有用,但它常常被误解,导致出现问题的问题.
>尽早取消每个参考(在不需要的时候).
所以,这段代码将起作用
<?PHP $data = array('a','c'); foreach( $data as &$x ) $x = strtoupper($x); unset($x); $exTradata = array('d',$x) = each($exTradata) ) { $data[] = strtoupper($x); } print_r($data); ?>
>通常,在多个控制结构中重用局部变量名称被认为是一种不好的方式.
所以下面的代码也可以使用
<?PHP $data = array('a',$y) = each($exTradata) ) { $data[] = strtoupper($y); }
以上是脚本宝典为你收集整理的PHP引用导致数据损坏全部内容,希望文章能够帮你解决PHP引用导致数据损坏所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。