Я попробовал Googling, попробовал документацию PHP, искал стек переполнения для ответа, но не мог найти ничего удовлетворительного. Я читал книгу, в которой автор использовал возврат по ссылке, но никогда не объяснил, что это такое. Код, используемый автором
function &getSchool() {
return $this->school;
}
, может ли кто-то объяснить простыми словами с примером об этой концепции.
Предположим, у вас есть этот класс:
class Fruit {
private $color = "red";
public function getColor() {
return $this->color;
}
public function &getColorByRef() {
return $this->color;
}
}
Класс имеет частное свойство и два метода, которые позволяют вам получить к нему доступ. Один возвращает по значению (поведение по умолчанию), а другой по ссылке. Разница между ними заключается в том, что:
Fruit
, потому что вы на самом деле изменение копии значения свойства. 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";
Предупреждение: Я чувствую себя обязанным упомянуть, что ссылки, хотя они и имеют законное использование, являются одной из тех функций, которые следует использовать только в редких случаях и только в том случае, если вы сначала тщательно рассмотрели любые альтернативы. . Менее опытные программисты склонны злоупотреблять ссылками, потому что они видят, что могут помочь им решить конкретную проблему, не видя при этом недостатков в использовании ссылок (в качестве расширенной возможности ее нюансы далеко не очевидны).
Пример, который вы разместили, возможно, написан на PHP4 или более ранней версии. Больше нет необходимости возвращать объекты по ссылке, поскольку они почти всегда выполняются таким образом автоматически в PHP5 +.
.Возврат по ссылке полезен, когда вы хотите использовать функцию, чтобы найти, к какой переменной должна быть привязана ссылка. Не используйте возврат по ссылке для увеличения производительности. Двигатель автоматически оптимизирует это самостоятельно. Возвращайте ссылки только тогда, когда у вас есть веская техническая причина.