php函数返回引用示例

<?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);

  

运行结果:

[[email protected] 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
)

  

  

时间: 2024-10-10 15:35:49

php函数返回引用示例的相关文章

关于C++函数思考2(函数返回引用和返回非引用的区别)

引用是提高代码效率的一大利器,尤其对于对象来说,当引用作为参数时候不用大面积的复制对象本身所造成的空间与时间的浪费.所以有时候对于参数的返回值我们也希望返回参数的引用.在这里我们回忆一下C语言函数返回局部变量所注意的方面,也可以看我的这篇文章.下来我们对于C++ 中函数返回引用或非引用进行探讨!! 1.返回引用 /********************************************************************** * * Copyright (c)2015

C++函数返回引用、非引用以及临时变量的问题

C++中新增了引用类型,所以函数的返回值可以是引用类型.那么就会有人想问 返回引用类型与返回非引用类型有区别吗? 结论是显然的,而且有明显的区别.尤其初学者会很容易绕进去.让我们先看四个函数原型.以int类型来举例 (1) int fun(...) { return ....//后面跟的是一个引用 } 例如:int fun(int &a) { return a; } (2)int fun(...) { return....//后面跟的是一个非引用 } 例如:int  fun(int a) { r

C++ 成员函数返回引用,三种获取返回值的效果

这个实验需要以下的代码: class Test { public: Test(){cout << "Test" << endl;} ~Test(){cout << "~Test" << endl;} Test(const Test &right) { cout << "Test(const)" << endl; this->a = right.a; } Test

c++函数返回引用的思考

由于使用c++太少,在项目中定义成员函数时,想着应该返回vector<string>&还是vector<string>:思考上升到函数返回对象时,经历几次构造函数. 依稀记得函数返回对象,需要经过生成一个临时对象(call copy constructor),然后根据语句是变量声明还是复制分别调用copy constructor 或者assign operator: 分别使用g++(4.84.xx)和VS2010+实验以下code: 1 #include "std

js学习笔记(一)函数返回数据示例

<script> function convertToCelsius(temp) /*传递参数*/ { var result = temp -32; /*减法赋值运算result*/ result = result / 1.8; /*除法赋值运算result*/ return result; /*返回数值result*/ } /*convertToCelsius(50);*/ /*var temp_fahrenheit = 95;*/ var temp_celsius = convertToC

C++ Primer 学习笔记_17_从C到C++(3)--引用、const引用、引用传递、引用作为函数返回值、引用与指针区别

欢迎大家阅读参考,如有错误或疑问请留言纠正,谢谢 一.引用 1.引用是给一个变量起别名 变量: 名称 空间 引用: 引用不是变量 引用仅仅是变量的别名 引用没有自己独立的空间 引用要与它所引用的变量共享空间 对引用所做的改变实际上是对它所引用的变量的改变 引用在定义的时候必须要进行初始化 引用一经初始化,不能重新指向其他变量 2.定义引用的一般格式: (1)类型  &引用名 = 变量名: (2)例如: int a=1; int &b=a; // b是a的别名,因此a和b是同一个单元 (3)

理解-加号重载要使用全局函数+返回值非引用

一.C++中的加号重载使用全局函数的一个有点是可以使用级联的方式进行加法操作. Fraction a,b,c,d,e; A=b+c+d+e; 若为成员函数 1.返回的b的this指针分别作用于后面的变量,因此是对b的修改: 2.如果返回一个新的变量,上面的级联的问题似乎可以解决. 3.问题在于如果存在隐式类型转换,且第一个参数为需要转化的类型时,可能找不到该定义的成员函数,因此使用全局的方式可以便面这个问题 二.返回值需要时一个值,而不是引用 从一个局部函数返回引用,可以考虑两种情况. 1.如果

c++ 函数返回研究[转]

一,c++函数的返回分为以下几种情况 1)主函数main的返回值:这里提及一点,返回0表示程序运行成功. 2)返回非引用类型:函数的返回值用于初始化在跳用函数出创建的临时对象.用函数返回值初始化临时对象与用实参初始化形参的方法是一样 的.如果返回类型不是引用,在调用函数的地方会将函数返回值复制给临时对象.且其返回值既可以是局部对象,也可以是求解表达式的结果. 3)返回引用:当函数返回引用类型时,没有复制返回值.相反,返回的是对象本身. 二,函数返回引用 1,当函数返回引用类型时,没有复制返回值.

实战c++中的string系列--函数返回局部变量string(引用局部string,局部string的.c_str()函数)

当函数返回字符串的时候,我们可以定义返回string和string&. 1写一个返回string引用的函数 std::string & TestStringReference() { std::string loal_str = "holy shit"; return loal_str; } 这个函数当然是错误的,编译器会提示我们: 返回局部变量或临时变量的地址: loal_str 即不能返回局部变量的引用. 2写一个返回string的函数(函数返回局部变量string