<?php
class Test
{
public $userCache;
public function init()
{
for($i = 0; $i < 5; $i++)
{
$user = array(
'name' => "joe$i",
'age' => 23 + $i,
);
$this->userCache[] = $user;
}
}
public function displayArray($arr = '')
{
if( gettype($arr) !== 'array' )
$arr = $this->userCache;
foreach($arr as $k => $v)
{
echo "$k: ";
print_r($v);
echo "\n";
}
}
public function &getUser($uid) // 函数返回引用
{
if( isset($this->userCache[$uid]) )
{
return $user = &$this->userCache[$uid]; // $user取引用(此处不能断)
}
else
{
echo "create a new user:\n";
$user = array('name'=>'xxy', 'age'=>66);
$this->userCache[$uid] = $user;
return $user = &$this->userCache[$uid];
}
}
public function modifyUser($uid)
{
//$user = $this->getUser($uid); // 非引用调用
$user = &$this->getUser($uid); // 引用调用
$this->displayArray($user);
echo "------------------\n";
$user['name'] = 'jjoe'; // 修改返回值
$this->displayArray($user);
$this->displayArray(); // 这里可看到被引用的对象值已被修改
}
}
$a = new Test();
$a->init();
$a->modifyUser(12);
运行结果:
[zcm@vm-fedora20 server]$ php test.php
create a new user:
name: xxy
age: 66
------------------
name: jjoe
age: 66
0: Array
(
[name] => joe0
[age] => 23
)
1: Array
(
[name] => joe1
[age] => 24
)
2: Array
(
[name] => joe2
[age] => 25
)
3: Array
(
[name] => joe3
[age] => 26
)
4: Array
(
[name] => joe4
[age] => 27
)
12: Array
(
[name] => jjoe
[age] => 66
)