日曜プログラミング

PHP好き集まれ〜!!

オブジェクトを配列へキャストした時に気になった点をメモ

オブジェクトを配列へ、それこそ(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バイトは存在する

一応ひと通り確認できました。
以上です。