2016-09-06 7 views
0

これに続いてguideがPHPでの参照を理解することは常に困難です。以下のパラメータで参照を使用する目的は何ですか?資料を参考にしなくてもレジストリパターン - 参考文献との相違点

public function register($name, &$object) 
{ 
    $this->registries[$name] =& $object; 
} 
public function &getRegistry($name) 
{ 
    return $this->registries[$name]; 
} 

public function register($name, $object) 
{ 
    $this->registries[$name] = $object; 
} 

public function getRegistry($name) 
{ 
    return $this->registries[$name]; 
} 

それは言及せずに、あまりにも正常に動作しますので、どのような利点がそれらを持っていますか?

+1

'$ object'が実際にオブジェクトである場合、これらの例に利点があるかどうかはわかりません。 –

+1

参照渡しは、オブジェクトのコピーではなくオブジェクトへの参照を渡します。参照渡しの場合、メソッド内でオブジェクトを変更することができ、変更は引数として渡されたオブジェクトに適用されます。 – feareoc

+1

@Rasmus '$ object'が*オブジェクト*の場合、変更は明示的な参照の有無にかかわらずどちらかに影響します。割り当て時にオブジェクトはコピーされません。 – deceze

答えて

2

オブジェクトは、PHP 4の暗時代に参照によって明示的に渡される必要がありました。基本的にPHP 5.0のオブジェクトはであり、参照はであり、参照によってオブジェクト参照を渡すかどうかには違いはありません。問題のすべてのガイドは、参照によって渡すオブジェクトを省略するように指示します。

+0

答えをありがとう! – laukok

+1

違いがあります。オブジェクトを参照として渡して保存すると、最初に渡された変数の値を変更すると(たとえば、別のオブジェクトまたは他の型に設定するなど)、 '$ this-> registries'の値にも影響します。 – ShiraNai7

+0

はい、十分ですが、参照を使用する場合、コードは参照の規則に従って動作します。非常に特定の場合を除いて、回避したいことが多い場合があります。これはそれらの機会の一つではありません。 – deceze