php - 在 PHP 中通过引用返回

标签 php reference return

我尝试了谷歌搜索,尝试了 PHP 文档,搜索了 Stack Overflow 的答案,但找不到任何令人满意的东西。我正在读一本书,其中作者使用了Return by Reference,但从未解释过它是什么。作者使用的代码是

function &getSchool() {
    return $this->school;
}

有人可以用简单的话解释一下这个概念吗?

最佳答案

假设你有这个类:

class Fruit {
    private $color = "red";

    public function getColor() {
        return $this->color;
    }

    public function &getColorByRef() {
        return $this->color;
    }
} 

该类有一个私有(private)属性和两个允许您访问它的方法。一个按值返回(默认行为),另一个按引用返回。两者的区别在于:

  • 使用第一种方法时,您可以对返回的值进行更改,这些更改不会反射(reflect)在 Fruit 的私有(private)属性中,因为您实际上是在修改属性值的副本。
  • 使用第二种方法时,您实际上是在返回 Fruit::$color 的别名 -- 不同的名称您指的是相同的变量。因此,如果您对它进行任何操作(包括修改其内容),您实际上是在直接对属性的值执行相同的操作。

这里有一些代码来测试它:

echo "\nTEST RUN 1:\n\n";
$fruit = new Fruit;
$color = $fruit->getColor();
echo "Fruit's color is $color\n"; 
$color = "green"; // does nothing, but bear with me
$color = $fruit->getColor();
echo "Fruit's color is $color\n"; 

echo "\nTEST RUN 2:\n\n";
$fruit = new Fruit;
$color = &$fruit->getColorByRef(); // also need to put & here
echo "Fruit's color is $color\n"; 
$color = "green"; // now this changes the actual property of $fruit
$color = $fruit->getColor();
echo "Fruit's color is $color\n"; 

See it in action

警告:我觉得有必要提一下,虽然它们确实有合法用途,但它们是那些应该很少使用的功能之一,只有在你仔细考虑过任何替代品的情况下才能使用首先。经验不足的程序员倾向于过度使用引用,因为他们认为可以帮助他们解决特定问题,同时又不会看到使用引用的缺点(作为一项高级功能,其细微差别远非显而易见)。

关于php - 在 PHP 中通过引用返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7455627/

相关文章:

php - Heroku worker 如何工作?

php - 将整数内爆到 mysql select 语句中(结果重复)

c++ - 引用类型转换运算符 : asking for trouble?

string - 将 Vec<String> 作为 IntoIterator<&'a str> 传递

php - 清理 LDAP_bind 查询

php - 如何在zend框架中获取插入记录的id

x86 - "ret"是否使管道停止?

javascript 链接从回调返回 this

pointers - 在 Golang 中取消引用指向同一类型的指针变量而无需引用

c - 从 C 函数返回数组