我尝试了谷歌搜索,尝试了 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";
警告:我觉得有必要提一下,虽然它们确实有合法用途,但它们是那些应该很少使用的功能之一,只有在你仔细考虑过任何替代品的情况下才能使用首先。经验不足的程序员倾向于过度使用引用,因为他们认为可以帮助他们解决特定问题,同时又不会看到使用引用的缺点(作为一项高级功能,其细微差别远非显而易见)。
关于php - 在 PHP 中通过引用返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7455627/