あなたは参照渡しする&修飾子を使用する必要がありますか?
技術的にも意味的にも、オブジェクトの場合でも、はいとなります。これは、オブジェクトを渡したり割り当てたりする2通りの方法があります。参照または識別子によって行われます。関数宣言は&
が含まれている場合は、のように:
function func(&$obj) {}
引数は、どんな参照によって渡されません。あなたは&
function func($obj) {}
すべてずに宣言した場合、識別子を経由して渡されるオブジェクトとリソースを除いて、値によって渡されます。識別子は何ですか?さて、あなたはそれをリファレンスへのリファレンスと考えることができます。以下の例を見てみましょう:
class A
{
public $v = 1;
}
function change($obj)
{
$obj->v = 2;
}
function makezero($obj)
{
$obj = 0;
}
$a = new A();
change($a);
var_dump($a);
/*
output:
object(A)#1 (1) {
["v"]=>
int(2)
}
*/
makezero($a);
var_dump($a);
/*
output (same as before):
object(A)#1 (1) {
["v"]=>
int(2)
}
*/
なぜない$a
が突然makezero
にそれを通過した後、整数になるのでしょうか?これは、という識別子がに上書きされたためです。我々は参照によって渡されていた場合:今
function makezero(&$obj)
{
$obj = 0;
}
makezero($a);
var_dump($a);
/*
output:
int(0)
*/
$a
整数です。したがって、の識別子を通過し、の参照を経由することには違いがあります。
マニュアルはすべての問題を解決します。 http://php.net/manual/en/language.oop5.references.php – rdlowrey