免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4199 | 回复: 4
打印 上一主题 下一主题

[引用] 函数前加一个&是什么意思? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-09-10 18:04 |只看该作者 |倒序浏览
比如
&funtion myfunction (){
    /*  ........... */

}
&不是代表变量的引用吗?
放在函数前面有代表什么呢?
难道代表返回一个返回值的引用? 糊涂了.
望高人指点.
谢谢.

论坛徽章:
1
技术图书徽章
日期:2013-12-05 23:25:45
2 [报告]
发表于 2005-09-10 18:12 |只看该作者

[引用] 函数前加一个&是什么意思?

http://w.yi.org/ftp/FAPM/PHP/php_manual_zh/language.references.whatdo.html

但是奉劝你,最好先把手册通读一下子。



引用做什么
PHP 的引用允许你用两个变量来指向同一个内容。意思是,当你这样做时:


<?php
$a =& $b
?>;  


这意味着 $a 和 $b 指向了同一个变量。
注: $a 和 $b 在这里是完全相同的,这并不是 $a 指向了 $b 或者相反,而是 $a 和 $b 指向了同一个地方。


同样的语法可以用在函数中,它返回引用,以及用在 new 运算符中(PHP 4.0.4 以及以后版本):


<?php
$bar =& new fooclass();
$foo =& find_var ($bar);
?>;  



注: 不用 & 运算符导致对象生成了一个拷贝。如果你在类中用 $this,它将作用于该类当前的实例。没有用 & 的赋值将拷贝这个实例(例如对象)并且 $this 将作用于这个拷贝上,这并不总是想要的结果。由于性能和内存消耗的问题,通常你只想工作在一个实例上面。

尽管你可以用 @ 运算符来关闭构造函数中的任何错误信息,例如用 @new,但用 &new 语句时这不起效果。这是 Zend 引擎的一个限制并且会导致一个解析错误。

引用做的第二件事是用引用传递变量。这是通过在函数内建立一个本地变量并且该变量在呼叫范围内引用了同一个内容来实现的。例如:


<?php
function foo (&$var)
{
    $var++;
}

$a=5;
foo ($a);
?>;  


将使 $a 变成 6。这是因为在 foo 函数中变量 $var 指向了和 $a 指向的同一个内容。更多详细解释见引用传递。

引用做的第三件事是引用返回。

论坛徽章:
0
3 [报告]
发表于 2005-09-10 19:35 |只看该作者

[引用] 函数前加一个&是什么意思?

的确手册上写了,可是还是不明白
手册说

  1. 同样的语法可以用在函数中,它返回引用,以及用在 new 运算符中(PHP 4.0.4 以及以后版本):
  2. <?php
  3. $bar =& new fooclass();
  4. $foo =& find_var ($bar);
  5. ?>;   
复制代码

这里是不是说foo就是一个find_var的返回值的引用?
但是如果这个函数没有返回值呢?
在实际中,这样写又有什么用呢?能不能举个例子。谢谢。

论坛徽章:
1
技术图书徽章
日期:2013-12-05 23:25:45
4 [报告]
发表于 2005-09-10 19:42 |只看该作者

[引用] 函数前加一个&是什么意思?

如果不用&,那么会在内存生成一个fooclass或者find_var的实例

如果使用,那么直接使用他们在内存的实例定义。

你最好把
http://w.yi.org/ftp/FAPM/PHP/php_manual_zh/language.references.html#language.references.whatare

这个多看清楚一些,包括这个的所有内容。

关于实例,你可以去研究研究C++的相关资料。

论坛徽章:
0
5 [报告]
发表于 2005-09-10 19:45 |只看该作者

[引用] 函数前加一个&是什么意思?

原帖由 "imbiss" 发表:
这里是不是说foo就是一个find_var的返回值的引用?
但是如果这个函数没有返回值呢?
在实际中,这样写又有什么用呢?能不能举个例子。谢谢。


这个东西没必要深究的, 或许只是对PHP引擎有作用.

对PHP程序员来说没多大区别; 当你的函数返回值是一很长的字串, 这时你可以试用 $xx = &foo(); 以免产生"拷贝", 过多的开销; 同时 foo 函数的定义也必须是 function &foo () { ... }

PHP语法器的包容度很大, 没有返回值的函数你用 &foo() 也不会有什么错误, 类似的例子(看似有误实不报错)很多啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP