參考,我想知道爲什麼預期我的PHP序列不起作用:序列化在PHP
<?
$x = "whatever...";
$y = array(&$x, "test, 1-2, 1-2...", &$x);
$yy = unserialize(serialize(&$y));
$y[0] = "blah";
echo($yy[0]); // prints 'whatever', was expecting 'blah'
?>
參考,我想知道爲什麼預期我的PHP序列不起作用:序列化在PHP
<?
$x = "whatever...";
$y = array(&$x, "test, 1-2, 1-2...", &$x);
$yy = unserialize(serialize(&$y));
$y[0] = "blah";
echo($yy[0]); // prints 'whatever', was expecting 'blah'
?>
As Explosion Pills'answer states,unserialize
「返回一個全新的值」。然而,序列化將保持「相對」引用。 (從技術上講,PHP中沒有相對引用的東西,但它是將其概念化的一種好方法)。
如果您在數組中收集引用和引用變量,則序列化數組將保存引用關係。它不會保留原始參考,但會在由unserialize
返回的新數組的上下文中自動重新創建它。
$vars = array();
$vars['x'] = 'initval';
$vars['xref'] =& $vars['x'];
$vars2 = unserialize(serialize($vars));
$vars2['x'] = 'newval';
echo $vars2['xref']; // prints "newval"
它對於對象中的內部引用的工作方式相同。
請確實給你的變量命名。當它充滿$ x和$ y時,讀取代碼非常困難 –
您可能[想避免在函數調用中通過引用傳遞參數](http://php.net/manual/en/language.references.pass。 PHP)。 –