オブジェクトを配列へキャストした時に気になった点をメモ
オブジェクトを配列へ、それこそ(array)でキャストした時に気になった点をメモしときます。
実は、予め前提知識としてクラスのpublic変数の変数名がキー、メンバ変数値が値になるということは知っていました。
そこでオブジェクトを配列にキャストしてみたのですが、いきなり添字にクラス名がついてたので調べてみたのです。
そこで以下の事実を知ったという経緯です。
1.private変数の場合は変数名の頭にクラス名がつく
2.protected変数の場合は変数名の頭に"*"がつく
3.頭に追加される値の前後にNULLバイトがついてくる
試しにコードを書いてみます。
<?php class MyClass { public $var1 = 1; public $var2 = 2; protected $var3 = 3; private $var4 = 4; } $obj = new MyClass(); foreach((array)$obj as $key=>$value){ echo "{$key}=>{$value}" . " "; } echo "\n"; // var1=>1 var2=>2 *var3=>3 MyClassvar4=>4 //Nullバイトがあるかどうか調べる array_walk($obj, function($value,$key){ if(false !== strpos($key,null)){ echo "{$key}のときにNullバイトは存在する",PHP_EOL; } }); // *var3のときにNullバイトは存在する // MyClassvar4のときにNullバイトは存在する
一応ひと通り確認できました。
以上です。