私自身、Javaのバックグラウンドに由来する、PHPでの参照渡しの動作について、一般的に少し不満があります。これはSOで以前に話された可能性があるので、これが冗長に見えるかもしれない場合は申し訳ありません。
わかりやすくするためのコード例を示します。Personクラスがあるとします。
<?php
class Person
{
private $name;
public function __construct($name)
{
$this->name = $name;
}
public function setName($name)
{
$this->name = $name;
}
public function getName()
{
return $this->name;
}
}
?>
および次の使用法:
<?php
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
&を使用して修正できることはわかっています。調べてみると、これは参照が値(参照のコピー)によって関数に渡されるためであることがわかります。しかし、これは私にとって予期しない/一貫性のない動作を構成するため、質問は次のようになります。彼らがこの方法でそれを行うことを選択した特定の理由または利点はありますか?