php中的引用传值分析

首先说变量的名称空间, 名称空间有全局名称空间, 局部名称空间(函数内部/方法内部), 所谓名称空间, 就是存放名字的地方, 就是一个符号表, 你可以想象, 有很多数组, 专门用来存放自己作用域中的名字.

每个名称空间是相互隔离的, 它们各自维护一个符号表用来保存自己作用域中的名称(变量名)

变量是由名字和值组成的. 上面的名称空间中保存了变量的名字, 变量的值有两种类型, 一种是直接的值, 另外一种是对其他变量的引用.

php中引用的用法:
1. 变量的引用赋值: $a = &$b
2. 函数调用时的引用参数传递
  1) 早期php是在调用时通过&符号传递引用类型的变量, 比如: func(&$arg);
  2) 后来, 函数的引用类型参数被规定为需要在函数声明时定义, 不如: function func(&$arg);
  注: 引用声明时定义引用类型参数后, 运行时引用参数传递被废弃, 需要在php.ini中增加allow_call_time_pass_reference来开启.
3. 函数返回引用类型, 这种应用方式需要声明函数时, 在函数名前增加&符号, 并且, 在调用时, 要用引用赋值方式, 比如:
PHP code
   
   
function & func() { return $a ; } $a = func(); // 这种调用方式得到的不是引用传值 $a =& func(); // 这样调用才是引用传值

  简而言之, 就是让函数的返回一个引用类型的值, 一个更实际的例子:
PHP code
   
   
$a = 1 ; function & func( & $a ) { return $a ; } $b = func( $a ); $c =& func( $a ); $b = 2 ; echo " a: $a , b: $b , c: $c . <br />\n " ; // 输出a: 1, b: 2, c: 1. //可见对$b的修改不会影响$a $c = 3 ; echo " a: $a , b: $b , c: $c . <br />\n " ; // 输出a: 3, b: 2, c: 3. //可见对$c的修改会影响$a

4. global和static两个关键字
  1) global用来声明函数内部要使用一个全局变量, 其实这里隐式的创建了一个引用, 比如, global $a;就是在本地名称空间中创建一个名字a, 让它指向全局空间中$a变量的值.
  2) static关键字也是隐式创建了一个引用, 这里谈的static是指在函数内部声明静态变量的用法, 比如
PHP code
   
   
function func() { static $a = 1 ; echo $a ++ . " , " ; } while ( $a ++ < 10 ) func(); // 输出结果: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,

这种用法会在一次请求(就是php一次完整的解释执行)过程中, 该变量只会被初始化一次, 每次函数调用结束后, 函数内的静态变量不会被销毁(而其他的局部变量会被销毁), 下一次函数调用时, 又重复利用上一次处理后的结果.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值