[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 メーリングリストの案内