1
次のコードは、私が持っている問題を説明しています。私は値によって変数に$this
を割り当てようとしていますが、最終的には参照によって割り当てられます。どうしたらいいですか?
次のスクリプトは、2つのクラスTest
とTestQuery
のセットです。 Test
は$num
属性の値をとると、スクリプトはTest->exist()
を呼び出し、2つの変数を作成します。$original
"値による"と$obj
の参照で、この時点では両方が同じです。最後に、スクリプトコールTestQuery->doit($obj)
を呼び出します。 $num
の値が2である場合$original
と$obj
の値がexist()
の方法で同じであるため、結果は無効です。
<?php
class TestQuery{
public function doit(&$obj)
{
if ($obj->getNum() == 2)
$obj->setCode(55);
}
}
class Test {
public $code;
public $num;
public function setCode($code) { $this->code= $code; }
public function getCode($code) { return $this->code; }
public function getNum()
{
return $this->num;
}
public function exist()
{
$original = $this;
$obj =& $this;
// The same objects ...(valid)
echo "<xmp>";
print_r($original);
echo " VS ";
print_r($obj);
echo "</xmp>";
$tc = new TestQuery();
$tc->doit($obj);
// The same objects newly... (invalid, hoping different)
echo "<xmp>";
print_r($original);
echo " VS ";
print_r($obj);
echo "</xmp>";
}
}
$t = new Test();
$t->num = 2;
$t->exist();
exit;
?>
説明のために、オブジェクトは常に参照によって割り当てられます。 Javaの場合も同様です.PHPは動作をコピーしました。 オブジェクトをコピーする唯一の方法は、確かにクローンを使用することです。 – Matthieu