今日、製品の作業中に偶然コード行を見つけました。
$c= new$class_name; $object_os= newstdClass; $c->on_init_app_router($object_os);
非常に混乱したので、クラス $c を調べたところ、空のクラス stdClass のインスタンス $object_os にいくつかの属性が動的に追加されていることがわかりました。
上記の 3 行のコードから、stdClass で何ができるのかが大まかにわかります。
stdClass はプロダクトコードで何度か登場しましたが、使ったことはなかったので、関連情報を確認し、私の経験を以下にまとめました。
stdClass は PHP の基本クラスであり、ほとんどすべてのクラスがこのクラスを継承するため、いつでも新しいクラスになり、この変数はオブジェクトになる可能性があります。同時に、この基本クラスにはメソッドが存在しないという特別な機能があります。
stdClass は PHP5 で徐々に普及してきています。これは、PHP5 オブジェクトがどこで呼び出されても参照アドレス型であるため、消費されるリソースが比較的少ないためです。他のページで値を割り当てると、コピーを参照するのではなく、値が直接変更されます。
例:
$user= newstdClass(); $user->name = ‘gouki’; $myUser= $user; $myUser->name = ‘flypig’;
PHP4 の時代であれば、そのようなコードはシステム リソースを消費するでしょう。理由:
$myUser= $user;
これによりコピーが作成されます。したがって、PHP4 では次のように使用されます:
$myUser= & $user;
この記事の冒頭の 3 行のコードから、stdClass を使用してオブジェクト型の要素を生成できることがわかります。次に、stdClass を使用して配列をオブジェクト クラスに変換し、そのためのいくつかのメソッドを紹介します。配列オブジェクトを相互に変換します。:
$arr= array(); $arr['a'] = 1; $arr['b'] = 2; $arr['c'] = 3; $object= newstdClass; foreach($arras$key=> $value) { $object->$key= $value; } var_dump($object);
結果の出力は次のとおりです:
object(stdClass)#1 (3) { ["a"]=> int(1) ["b"]=> int(2) ["c"]=> int(3) }
functionobject_to_array($obj) { $_arr= is_object($obj) ? get_object_vars($obj) : $obj; foreach($_arras$key=> $val) { $val= (is_array($val) || is_object($val)) ? object_to_array($val) : $val; $arr[$key] = $val; } return$arr; }
$arr= array('key1'=>'test1', 'key2'=> 'test2'); var_dump(newArrayObject($arr));
結果の出力は次のとおりです:
object(ArrayObject)#1 (1) { ["storage":"ArrayObject":private]=> array(2) { ["key1"]=> string(5) "test1" ["key2"]=> string(5) "test2" } }
もちろん、PHP のパワーと柔軟性を考慮すると、配列やオブジェクトを変換する方法は他にもたくさんあるはずです。