重複の可能性:
配列をオブジェクトPHPに変換
単純なPHPアプリケーションを作成していて、データストレージとして [〜#〜] yaml [〜#〜] ファイルを使用したいのですが。連想配列としてのデータ。次のような構造になります。
$user = array('username' => 'martin', 'md5password' => '5d41402abc4b2a76b9719d911017c592')
ただし、連想配列をいくつかの関数で拡張し、->
演算子を使用したいので、次のように記述できます。
$user->username = 'martin'; // sets $user['username']
$user->setPassword('hello'); // writes md5 of 'hello' to $user['md5password']
$user->save(); // saves the data back to the file
クラス定義なしでこれを行う良い方法はありますか?
基本的に、JavaScriptスタイルのオブジェクトをPHP :)に入れたいです。
キャストするだけです:
$user = (object)$user;
もちろん、 ArrayAccess
を実装するクラスを作成するなど、他のより柔軟なソリューションもあります。
$user = new User(); // implements ArrayAccess
echo $user['name'];
// could be the same as...
echo $user->name;
文字通り$class = new stdClass;
そして繰り返して再割り当てします。型キャストと同じように、これは1レベルの深さしかないことに注意してください。すべてを取得するには、再帰的なイテレータを作成する必要があります。私が覚えていることから、Kohana 2/3にはおそらく使用できるto_object()があります。
それを見つけた:
class Arr extends Kohana_Arr {
public static function to_object(array $array, $class = 'stdClass')
{
$object = new $class;
foreach ($array as $key => $value)
{
if (is_array($value))
{
// Convert the array to an object
$value = arr::to_object($value, $class);
}
// Add the value to the object
$object->{$key} = $value;
}
return $object;
}