[PHP-users 18929]Re: $thisの扱い、代替手段について

Takeo Matumoto hac20680 @ rio.odn.ne.jp
2003年 11月 14日 (金) 20:29:46 JST


お世話になります、松本です。

大変失礼しました(汗

参照渡しか、値渡しなのかを確認するため、
先ほどのコードに少し手を加えてみました。

<?php
	
	class test1{
		
		var $a = "testtest";
		var $b = "TESTTEST";
		
		function getA(){
			return $this->a;
		}
		
		function getB(){
			return $this->b;
		}
		
		function setA($a){
			$this->a = $a;
		}
		
		function setB($b){
			$this->b = $b;
		}
		
	
		
		function createTest2(){
			return new test2($this);
		} 
	}
	
	class test2{
		
		var $a;
		var $b;
		
		function test2($test1){
			
			$this->a = $test1->getA();
			$this->b = $test1->getB();
			
			/* test2の初期化と同時に$test1のフィールドの値を変更 
			  test1インスタンスのフィールドが変更されるか否か?
			*/
			$test1->setA('AAAAAA');
			$test1->setB('BBBBBB');
			
		}
		
		function getA(){
			return $this->a;
		}
		function getB(){
			return $this->b;
		}
		
		
		
	}
	
	$test1 =  new test1();
	$test2 = $test1->createTest2();
	
	$a = $test2->getA();
	$b = $test2->getB();
	
	print($a);
	print($b);
	
	
	print($test1->getA());//test1インスタンスのフィールドが変更されたか?
	print($test1->getB());


?>

以上を実行すると


testtestTESTTESTtesttestTESTTEST

のような結果が得られました。

そこで、$test2のコンストラクタの引数を参照渡しにすると
($this → &$this)


testtestTESTTESTAAAAAABBBBBB

として、期待した結果を得ることができました。
以上により、当初の問題は解決致しました。
皆様ご教授、有難うございました。


-- 
Takeo Matumoto <hac20680 @ rio.odn.ne.jp>




PHP-users メーリングリストの案内