函数名称之前的 & 表示什么?

2022-08-30 19:14:53

函数名称之前的表示什么?&

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

function &query($sql) {
 // ...
 $result = mysql_query($sql);
 return $result;
}

另外,这种语法在实践中在哪里使用?


答案 1

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

是的。

另外,这种语法在实践中在哪里使用?

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


答案 2

为了回答你问题的第二部分,这里有一个地方我必须使用它:魔术师!

class FooBar {
    private $properties = array();

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

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

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

$foobar = new FooBar;
$foobar->subArray = array();
$foobar->subArray['FooBar'] = 'Hallo World!';

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

好吧,这可能只是一个在PHP中绕过一些错误设计的黑客,但它仍然有用。

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


推荐