形参和实参,值传递和引用传递?

虽然接受了一定的编程科班教育,但是一直在搞Web,连形参和实参,值传递和引用传递的概念都搞模糊了。
正好趁自己不理解,把这几个概念都了解一下,免得以后搞个大笑话。

首先是形参和实参,这两个概念和值传递引用传递的概念搞混,但是现在了解了一下,完全不是一回事。
比如有个函数:
function test($a, $b, $c) {
print_r($a + $b + $c);
}
然后有个调用:
test($one, $two, $three);
那么$one, $two, $three就叫做实参,$a, $b, $c就叫做形参,形参只有在函数被调用时短暂存在。

然后再说值传递和引用传递
传参有两种效果,一种传递了以后,修改形参不影响实参;一种传递了之后,修改实参会影响形参。
值传递就是修改形参不影响实参的方式。
引用传递就是修改实参会影响形参的方式。

还得说一个特别一点的传递方式,对象类型引用变量的传参。
对象类型引用变量无论是值传递还是引用传递,最后都能修改被引用的对象的数据,这点需要牢记。
怎么说呢?整个过程是这样的:

  • 变量(地址)->地址指向的数据(引用)->引用指向的数据(对象)。

作为对比,普通类型变量的过程是这样的:

  • 变量(地址)->地址指向的数据(数据)。

标签: none

添加新评论