我对
PHP中的引用工作方式有一点普遍的不满,我自己来自Java背景.这可能是之前在SO上讨论的,所以如果这看起来多余,我很抱歉.
我将给出一个代码示例来说明问题.假设我们有一个Person类:
class Person
{
private $name;
public function __construct($name)
{
$this->name = $name;
}
public function setName($name)
{
$this->name = $name;
}
public function getName()
{
return $this->name;
}
}
?>
以及用法:
require_once __DIR__ . '/Person.php';
function changeName(Person $person)
{
$person->setName("Michael");
}
function changePerson(Person $person)
{
$person = new Person("Jerry");
}
$person = new Person("John");
changeName($person);
echo $person->getName() . PHP_EOL;
changePerson($person);
echo $person->getName() . PHP_EOL;
?>
现在我和许多其他人从Java或C#编程到PHP,希望输出上面的代码:
Michael
Jerry
但是,它没有,它输出:
Michael
Michael
我知道它可以通过使用&来修复.通过查看,我明白这是因为引用按值(引用的副本)传递给函数.但这对我来说是一种意外/不一致的行为,所以问题是:他们选择这样做是否有任何特定的理由或好处?