PHP引用传值规范问题
在我上一篇: shopnc 商城源码阅读笔记--开篇概述 中,遇到了一个PHP引用传值导致的错误,情况大致如下:
在我查阅PHP官方文档 的中文版的时候 http://php.net/manual/zh/language.references.pass.php
看到如下描述:
注意在函数调用时没有引用符号——只有函数定义中有。光是函数定义就足够使参数通过引用来正确传递了。在最近版本的 PHP 中如果把 & 用在foo(&$a); 中会得到一条警告说“Call-time pass-by-reference”已经过时了。
然后切换到英文版文档得到以下描述:
Note: There is no reference sign on a function call - only on function definitions. Function definitions alone are enough to correctly pass the argument by reference. As of PHP 5.3.0, you will get a warning saying that "call-time pass-by-reference" is deprecated when you use & in foo(&$a);. And as of PHP 5.4.0, call-time pass-by-reference was removed, so using it will raise a fatal error.
坑si人不偿命有木有啊!
一个轻轻地,温柔地告诉你,没事的,不会很痛,一下子就过了,让你有用@屏蔽警告的冲动
实际上这会让你痛得死去活来,根本无法继续。
所以这个问题根本没有什么为什么,非常清楚
光是函数定义就足够使参数通过引用来正确传递了,如
function test(&var){
}
不必在调用test的时候再进行引用传递,如 test(&var); 否则会报致命错误,跟没写分号一样,没有什么为什么!
另外获得一个宝贵经验:以后在看官方文档的时候,不要看中文版.
如果英文不好,可以搜集相关的博文,看别人总结出来的知识也比看中文官方文档好。
PHP引用传值规范问题的更多相关文章
- Java基础必备 -- 堆栈、引用传值、垃圾回收等
在Java中,对象作为函数参数的传递方式是值传递还是引用传递?String str = "abc" 与 String str = new String("abc&quo ...
- PHP和CS的引用传值
PHP的引用传值 function change_value($num){ $num+=2; } $age = 3; change_value(&$age); echo $age; CS的引用 ...
- 从一次面试经历谈PHP的普通传值与引用传值以及unset
关于这个概念一般都会在PHP的第一堂课说变量的时候给介绍,并且我以前还给其他PHPer介绍这个概念.但是作为一个工作一段时间的PHPer的我,竟然在面试的时候一下子拿不定主意最后还答错了,很觉得丢脸( ...
- Python引用传值总结
Python函数的参数传值使用的是引用传值,也就是说传的是参数的内存地址值,因此在函数中改变参数的值,函数外也会改变. 这里需要注意的是如果传的参数类型是不可改变的,如String类型.元组类型,函数 ...
- php引用传值
isset();判读值是否值在 unset();取消变量 <?php$a=array("a","b","c");$b=$a;$b[2] ...
- php普通传值和引用传值 (相当通俗易懂的一篇讲解)
首先,要理解变量名存储在内存栈中,它是指向堆中具体内存的地址,通过变量名查找堆中的内存; 普通传值,传值以后,是不同的地址名称,指向不同的内存实体; 引用传值,传引用后,是不同的地址名称,但都指向同一 ...
- foreach 引用传值&
foreach 引用传值& php 怎么在foreach中循环数组 ,的时候添加元素跟值 foreach($arr as $key => &$vo){ //注意,由于上面遍 ...
- Android之线程安全的单例模式,Adapter注意事项之引用传值
线程安全的单例模式单位模式一般写法如下: public static FestivalLab mInstance; private FestivalLab() { } public static Fe ...
- PHP的普通传值与引用传值以及unset
首先,要理解变量名存储在内存栈中,它是指向堆中具体内存的地址,通过变量名查找堆中的内存; 普通传值,传值以后,是不同的地址名称,指向不同的内存实体; 引用传值,传引用后,是不同的地址名称,但都指向同一 ...
随机推荐
- J2EE它是一个框架?平台?规范?
一.J2EE究竟是什么 百度百科上说J2EE是框架.假设没有人给我讲.假设我不去各种论坛上去找,我可能就会让自己生硬的接受这个说法了.可实际上,我非常幸运,我有一个团队帮助我一起进步. 事实上总的说起 ...
- PHP内核探索之变量 图解
http://blog.csdn.net/ohmygirl/article/details/41542445 http://www.laruence.com/2008/09/19/520.html
- 如何查找局域网的外网ip
方法一:一个简单的方法 用你电脑打开www.ip138.com 就可以看到自己的公网IP地址 方法二:如果一定要从路由器里面看 那就打开路由的配置页面 一般在系统状态里面 会有个WAN口IP 那就是你 ...
- 如何快速的开发一个完整的iOS直播app(原理篇)
目录 [如何快速的开发一个完整的iOS直播app](原理篇) [如何快速的开发一个完整的iOS直播app](播放篇) [如何快速的开发一个完整的iOS直播app](采集篇) 前言 大半年没写博客了,但 ...
- Intent传值之通过Application传值
传值第五种方式: * 程序的全局变量application * 特点:1.一个程序application对象只能有一个 * 2.application对象在程序启动时就创建 * 3.通常用来存放全局变 ...
- mvn打包
mvn install -DskipTests mvn install -Dmaven.test.skip=true
- angualrjs学习总结二(作用域、控制器、过滤器)
一:Scope简介 Scope(作用域) 是应用在 HTML (视图) 和 JavaScript (控制器)之间的纽带.Scope 是一个对象,有可用的方法和属性.Scope 可应用在视图和控制器上. ...
- 关于Git的分支
分支是代码管理的利器.如果没有有效的分支管理.代码管理就适应不了复杂的开发过程和 项目的需要. 分支命令概述: 在Git中分支管理使用命令git branch.该命令的主要用法如下: 用法一: git ...
- 【C语言】01-函数
一.函数的分类 前面已经说过,C语言中的函数就是面向对象中的"方法",C语言的函数可以大概分为3类: 1.主函数,也就是main函数.每个程序中只能有一个.也必须有一个主函数.无论 ...
- oracle11g安装成功