PHP - 作为对象的关联数组

2022-08-30 18:51:39

可能的重复:
将数组转换为对象 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

有没有一种在没有类定义的情况下执行此操作的好方法?

基本上,我希望在PHP中有JavaScript样式的对象:)


答案 1

只需投掷它:

$user = (object)$user;

当然,还有其他更灵活的解决方案,例如创建一个实现 ArrayAccess 的类:

$user = new User(); // implements ArrayAccess

echo $user['name'];
// could be the same as...
echo $user->name;

答案 2

从字面上看,只需创建一个,然后迭代并重新分配。请注意,这只是一个级别的深度,就像类型转换一样。您必须编写一个递归迭代器才能获得所有内容。根据我的记忆,Kohana 2/3有to_object()你可以使用。$class = new stdClass;

找到它:

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;
    }

推荐