首页 > 代码库 > PHP引用传值规范问题

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引用传值规范问题