[PHP-users 23942] Re: get_class_varsについて

utsumi u-takasan @ pat.hi-ho.ne.jp
2004年 12月 18日 (土) 02:24:57 JST


丸山様、こんにちは。

> 私も確認しました。確かに5.0.2と5.0.3では動作が異なります。
そうですか。こういう仕様に変更されたのですかね。

> get_object_varsと同じ結果が返ってくるようです。
継承先の動作が少し違うようです。
外部からプロパティが見えるように、メソッドを追加して、テストしてみました。
すると、get_class_vars()は5.0.2より5.0.3がアクセス制限が強くなっているよ
うですが、get_object_vars()は、逆に弱くなっているようです。

下記のコードを実行してみました。

<?
class sample {
	public $key1;
	private $key2;
	protected $key3;
	
	function my_get_class_vars() {
		return get_class_vars(get_class($this));
	}
	
	function my_get_object_vars() {
		return get_object_vars($this);
	}
}

class sample2 extends sample {
	public $key4;
	private $key5;
	protected $key6;
}

$sample = new sample;
$sample2 = new sample2;

print("get_object_vars::");
print_r(get_object_vars($sample));
print("<br>");
print("get_class_vars::");
print_r(get_class_vars(get_class($sample)));
print("<br>");

print("sample->my_get_class_vars::");
print_r($sample->my_get_class_vars());
print("<br>");
print("sample->my_get_object_vars::");
print_r($sample->my_get_object_vars());
print("<br>");

print("sample2->my_get_class_vars::");
print_r($sample2->my_get_class_vars());
print("<br>");
print("sample2->my_get_object_vars::");
print_r($sample2->my_get_object_vars());
print("<br>");

?>

5.0.2の実行結果
get_object_vars::Array ( [key1] => ) 
get_class_vars::Array ( [key1] => [key2] => [key3] => ) 
sample->my_get_class_vars::
	Array ( [key1] => [key2] => [key3] => ) 
sample->my_get_object_vars::
	Array ( [key1] => ) 
sample2->my_get_class_vars::
	Array ( [key4] => [key5] => [key6] => [key1] => [key3] => ) 
sample2->my_get_object_vars::
	Array ( [key4] => [key1] => ) 

5.0.3の実行結果
get_object_vars::Array ( [key1] => ) 
get_class_vars::Array ( [key1] => ) 
sample->my_get_class_vars::
	Array ( [key1] => [key2] => [key3] => ) 
sample->my_get_object_vars::
	Array ( [key1] => [key2] => [key3] => ) 
sample2->my_get_class_vars::
	Array ( [key4] => [key1] => ) 
sample2->my_get_object_vars::
	Array ( [key4] => [key5] => [key6] => [key1] => [key3] => ) 

こうして比較してみると、仕様変更の理由がわからないのですが・・・
5.0.2の方が「get_object_vars()はpublicしかアクセスできない、
get_class_vars()はそのほかのプロパティもアクセスできる」ということで、
すっきりすると思いますが。


---------------------------------------------------------------------
T.Utsumi  E-Mail : u-takasan @ pat.hi-ho.ne.jp




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