下面的代码说明了PHP引用的奇怪行为:
<?php
function this_works()
{
$root = array('name'=>'root', 'children'=>array());
$level_1 = array('name'=>'level_1', 'children'=>array());
$item1 = array('name'=>'level_2_1', 'children'=>array());
$item2 = array('name'=>'level_2_2', 'children'=>array());
$croot = &$root;
$croot['children'][] = &$level_1;
$croot = &$level_1;
$croot['children'][] = &$item1;
$croot['children'][] = &$item2;
$croot = &$root;
print_r($croot);
}
function this_fails()
{
$root = array('name'=>'root', 'children'=>array());
$level_1 = array('name'=>'level_1', 'children'=>array());
$item1 = array('name'=>'level_2_1', 'children'=>array());
$item2 = array('name'=>'level_2_2', 'children'=>array());
$croot = &$root;
$stack = array();
$croot['children'][] = &$level_1;
$crootref = &$croot;
array_push($stack, $crootref);
$croot = &$level_1;
$croot['children'][] = &$item1; …Run Code Online (Sandbox Code Playgroud)