函数名称之前和之前的含义是什么?

Zac*_*112 22 php function

什么是&函数名前意味着什么?

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

function &query($sql) {
 // ...
 $result = mysql_query($sql);
 return $result;
}
Run Code Online (Sandbox Code Playgroud)

此外,在实践中使用这种语法的位置是什么?

Bol*_*ock 8

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

是.

此外,在实践中使用这种语法的位置是什么?

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

  • @nikic:你有没有支持你声称php5**中的对象是按价值传递的? (3认同)

Nik*_*kiC 7

要回答你问题的第二部分,我必须在这里使用它:魔术吸气剂!

class FooBar {
    private $properties = array();

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

     public function __set($name, $value) {
        $this->properties[$name] = $value;
    }
}
Run Code Online (Sandbox Code Playgroud)

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

$foobar = new FooBar;
$foobar->subArray = array();
$foobar->subArray['FooBar'] = 'Hallo World!';
Run Code Online (Sandbox Code Playgroud)

相反,PHP会抛出错误,说"不能间接修改重载属性".

好吧,这可能只是为了解决PHP中的一些恶意设计,但它仍然有用.

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


Art*_*cto 5

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

不可以.区别在于它可以通过引用返回.例如:

<?php
function &a(&$c) {
    return $c;
}
$c = 1;
$d = a($c);
$d++;
echo $c; //echoes 1, not 2!
Run Code Online (Sandbox Code Playgroud)

要通过引用返回,您必须这样做:

<?php
function &a(&$c) {
    return $c;
}
$c = 1;
$d = &a($c);
$d++;
echo $c; //echoes 2
Run Code Online (Sandbox Code Playgroud)

此外,在实践中使用这种语法的位置是什么?

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

nikic给出了一个在实践中使用它的一个很好的例子.