小论PHP的函数参数传递方式

在php中除object类型外其它类型的参数都是以传值(既拷贝)的方式传递,包括数组和字符串,这一点和其它大多数编程语言很不一样。大多语言数组都是实际以传址方式进行参数传递。在有的静态语言中可以声明数组类型参数为传值,但这个“值”实际上还是“址”,只是拷贝了一个数组本身的一个引用。而在PHP中则是不折不扣把整个数组元素值传递进函数,拷贝了整个数组。参看我下面所写的测试代码。

 <?php
/**
 * 演示php函数参数不同的传递方式
 *
 * @version $Id$
 * @copyright 2006
 **/
$numvalue=10;
$strvalue="this is string";
$arrvalue=array('key1'=>'this','key2'=>'is','key3'=>'array');
$objvalue=new A();
$objvalue->mystr="this is a object";
class A
 {
 var $mystr;
 function __tostring()
  {
   return $this->mystr;
  }
 }
function set_numvalue($value)
 {
  $value+=1;
  echo $value.'<br>';
 }
function set_strvalue($value)
 {
  $value="this is still a string!";
  echo $value.'<br>';
 }
function set_arrvalue($value)
 {
  $value['key3']='new array';
  echo $value['key3'].'<br>';
 }
function set_objvalue($value)
 {
  $value->mystr="this is a new object";
  echo $value->mystr.'<br>';
 }
set_numvalue($numvalue);
echo $numvalue.'<br>';
set_strvalue($strvalue);
echo $strvalue.'<br>';
set_arrvalue($arrvalue);
echo $arrvalue['key3'].'<br>';
set_objvalue($objvalue);
echo $objvalue->mystr.'<br>';
?>

在IE中得到如下输出

11
10


this is still a string! //说明函数内的对字串修改不影响外面的字串。
this is string


new array //说明函数内的对数组修改不影响外面的数组。
array


this is a new object  //这两行输出一样,说明对象类型是个传址传递。
this is a new object

所以我们在PHP编程进行数组参数传递时,为了提高效率尽可能采用引用变量声明&

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值