Подтвердить что ты не робот

PHP - ассоциативный массив как объект

Возможный дубликат:
Преобразование массива в объект 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:)

4b9b3361

Ответ 1

Просто бросьте его:

$user = (object)$user;

Конечно, существуют и другие, более гибкие решения, такие как создание класса, который реализует ArrayAccess:

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

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

Ответ 2

Буквально просто делайте $class = new stdClass;, итерации и переназначения. Имейте в виду, что это только один уровень глубины, точно так же, как приведение типов. Вам нужно будет написать рекурсивный итератор, чтобы получить все. Из того, что я помню, 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;
    }