关于PHP参数的引用传递和值传递
如果希望编写一个名为increment()的函数来增加一个变量的值,我们可能会按如下方式编写这个函数:
这段代码是没有用的。下面测试代码的输出结果是“10”。
$value 的内容没有被修改。这要归因于作用域规则。这段代码将创建一个名为$value的变量,它的值是10。然后调用函数increment()。当函数被调用 时,它内部的变量$value被创建。它的值加上1,所以$value在函数内部的值为11,直到函数结束,接下来我们返回到调用它的代码。在这段代码 中,变量$value是一个不同的变量,具有全局域,所以它的值没有变。解决这个问题的一个办法是将函数内的$value声明为全局变量,但这意味着为了 使用这个函数,要进行变量运算的变量需要被命名为$value。
通常,函数获取参数的方式是值传递。当传递一个参数的时候,一个新的并且包含该传入值的变量被创建。它是原来那个变量的副本。可以以任意的方式修改它,但函数外部原来变量的值是不会改变的(这是PHP内部所实现的一个微小的简化)。
更 好的办法是使用引用传递。这里,在参数被传递给函数的时候,函数不会再创建一个新变量,而是函数获得一个原来变量的引用。这个引用有一个变量名称,它以美 元符号开始,可以像另一个变量那样使用它。其区别在于它不是获得变量本身的值,而是指向原来的值。任何对该引用的修改都会影响到原始变量值。
可以通过在函数定义的参数名前加一个地址符(&)来指定参数的引用传递。在函数调用处不用修改。
前面的increment()的例子就可以修改为引用传递参数,这样它就可以正常工作了。
现在,我们有了一个可运行的函数,而且可以任意给想要进行增量运算的变量命名。正如前面所提到过的,在函数的内外使用同样的名称会引起混淆,所以我们给主脚本变量一个新的名称。如下所示的测试代码在调用increment()之前将显示10,调用之后会显示11。
关于PHP参数的引用传递和值传递的更多相关文章
- 理解Java中的引用传递和值传递
关于Java传参时是引用传递还是值传递,一直是一个讨论比较多的话题,有论坛说Java中只有值传递,也有些地方说引用传递和值传递都存在,比较容易让人迷惑.关于值传递和引用传递其实需要分情况看待,今天学习 ...
- effective c++:引用传递与值传递,成员函数与非成员函数
以pass-by-reference-to-const 替换pass-by-value 考虑以下class继承体系 class Person { public: Person(); // parame ...
- Java Object 引用传递和值传递
Java Object 引用传递和值传递 @author ixenos Java没有引用传递: 除了在将参数传递给方法(或函数)的时候是"值传递",传递对象引用的副本,在任何用&q ...
- (转载)理解Java中的引用传递和值传递
关于Java传参时是引用传递还是值传递,一直是一个讨论比较多的话题,有论坛说Java中只有值传递,也有些地方说引用传递和值传递都存在,比较容易让人迷惑.关于值传递和引用传递其实需要分情况看待,今天 ...
- java到底是引用传递还是值传递?
今天我们来讲讲一个在学习中容易误解的问题,面试中也偶尔问到,java方法调用时到底是值传递还是引用传递? 首先,请大家来做一个判断题,下面的3个问题是否描述正确 1. java基本数据类型传递是值传递 ...
- Java中没有引用传递只有值传递(在函数中)
◆传参的问题 引用类型(在函数调用中)的传参问题,是一个相当扯的问题.有些书上说是传值,有些书上说是传引用.搞得Java程序员都快成神经分裂了.所以,我们最后来谈一下“引用类型参数传递”的问题. 如下 ...
- Java中只有按值传递,没有按引用传递!(两种参数情况下都是值传递)
今天,我在一本面试书上看到了关于java的一个参数传递的问题: 写道 java中对象作为参数传递给一个方法,到底是值传递,还是引用传递? 我毫无疑问的回答:“引用传递!”,并且还觉得自己对java的这 ...
- java引用传递和值传递
关于Java传参时是引用传递还是值传递,一直是一个讨论比较多的话题,有论坛说Java中只有值传递,也有些地方说引用传递和值传递都存在,比较容易让人迷惑.关于值传递和引用传递其实需要分情况看待,今天学习 ...
- (转载)PHP数组传递是值传递而非引用传递
(转载)http://www.fengfly.com/plus/view-212127-1.html 在调用函数时通过将PHP数组作为实参赋给形参,在函数中修改,并不会影响到数组本身. 说明此过程中的 ...
- Java中的引用传递和值传递
Java中的引用传递和值传递 关于Java的引用传递和值传递,在听了老师讲解后,还是没有弄清楚是怎么一回事,于是查了资料,所以在这里与大家分享,有不对的地方,欢迎大家留言. java中是没有指针的,j ...
随机推荐
- 读取App.config自定义标签的值
一:程序截图 二:具体代码 config配置: <?xml version="1.0" encoding="utf-8" ?> <config ...
- HDOJ(HDU) 2138 How many prime numbers(素数-快速筛选没用上、)
Problem Description Give you a lot of positive integers, just to find out how many prime numbers the ...
- Web —— tomcat 问题解决
1.在Eclipse 上部署到Tomcat,使用mybatis 访问数据库,junit测试访问正常,Tomcat运行时报错: java.lang.NoClassDefFoundError: org/a ...
- js点击弹出div层
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Info.plist和pch文件的作用,UIApplication,iOS程序的启动过程,AppDelegate 方法解释,UIWindow,生命周期方法
Info.plist常见的设置 建立一个工程后,会在Supporting files文件夹下看到一个“工程名-Info.plist”的文件,该文件对工程做一些运行期的配置,非常重要,不能删除 注:在旧 ...
- 当在类中的 Parcelable 接口使用 ArrayList < customObject > android 系统: nullPointerException
我想使调用音乐使用 parcelable,所以我可以访问两个不同的活动中的音乐的实例的类.我不想使用可序列化的速度的目的.当我尝试将它使用传递时,我总是收到 nullPointerException: ...
- Oracle Minus 取差集
Oracle Minuskeyword SQL中的MINUSkeyword SQL中有一个MINUSkeyword,它运用在两个SQL语句上,它先找出第一条SQL语句所产生的结果,然后看这些结果有没有 ...
- 关于OS_PRIO_SELF的说明
在看ucosii 中关于删除任务的函数 OSTaskDel 时看到 if (prio == OS_PRIO_SELF) { /* See ...
- IO流--转载
第 1 部分 从输出流中读取 http://www.ibm.com/developerworks/cn/java/j-io1/ 自早期基于浏览器的 applet 和简单应用程序以来,Java 平台已有 ...
- sdaf