首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >函数名前的&表示什么?

函数名前的&表示什么?
EN

Stack Overflow用户
提问于 2010-07-15 20:33:50
回答 4查看 9.3K关注 0票数 22

函数名前的&表示什么?

这是否意味着$result是通过引用而不是通过值返回的?如果是,那么是正确的吗?在我的记忆中,你不能返回对局部变量的引用,因为一旦函数退出,它就消失了。

代码语言:javascript
复制
function &query($sql) {
 // ...
 $result = mysql_query($sql);
 return $result;
}

另外,在practice中如何使用这种语法?

EN

回答 4

Stack Overflow用户

发布于 2010-07-15 20:38:13

这是否意味着$result是通过引用而不是值返回的?

是。

还可以在practice中的哪里使用这样的语法?

这在PHP 4脚本中更为普遍,在PHP 4脚本中,默认情况下对象是通过值传递的。

票数 8
EN

Stack Overflow用户

发布于 2010-07-15 20:58:25

为了回答你的问题的第二部分,这里有一个我不得不用到的地方:魔法getters!

代码语言:javascript
复制
class FooBar {
    private $properties = array();

    public function &__get($name) {
        return $this->properties[$name];
    }

     public function __set($name, $value) {
        $this->properties[$name] = $value;
    }
}

如果我没有在那里使用&,这是不可能的:

代码语言:javascript
复制
$foobar = new FooBar;
$foobar->subArray = array();
$foobar->subArray['FooBar'] = 'Hallo World!';

相反,PHP会抛出一个错误,比如“不能间接修改重载属性”。

好吧,这可能只是为了避免PHP中的一些错误设计,但它仍然很有用。

但老实说,我现在想不出另一个例子。但我敢打赌有一些罕见的用例。

票数 7
EN

Stack Overflow用户

发布于 2010-07-15 22:35:10

这是否意味着$result是通过引用而不是值返回的?

不是的。不同之处在于,它可以通过引用返回。例如:

代码语言:javascript
复制
<?php
function &a(&$c) {
    return $c;
}
$c = 1;
$d = a($c);
$d++;
echo $c; //echoes 1, not 2!

要通过引用返回,您必须执行以下操作:

代码语言:javascript
复制
<?php
function &a(&$c) {
    return $c;
}
$c = 1;
$d = &a($c);
$d++;
echo $c; //echoes 2

还可以在practice中的哪里使用这样的语法?

在实践中,只要您希望函数的调用者在不通知被调用者的情况下操作被调用者拥有的数据,就可以使用。这很少使用,因为它违反了封装-您可以将返回的引用设置为您想要的任何值;被调用者将无法验证它。

nikic给出了一个很好的例子,说明了这一点在实践中的应用。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3255516

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档