Из ассоциативного массива в объект

ChAk

Новичок
Не люблю ассоциативные массивы так как они затрудняют рефакторинг. Другое дело объекты с которыми прекрасно дружит любая ide. Поэтому везде стараюсь использовать объекты вместо ассоциативных массивов.

Задача из ассоциативные массивы сделать объект на основании объявленного класса.

PHP:
class Cat
{
    public $sex    = 'male';
    public $name    = 'Vasya';
    public $weight    = 5;
}
$cat = new Cat();

// из объекта в массив - нет проблем
$cat_array = ((array) $cat);
var_dump($cat_array);
// выведет
array(3) {
  'sex' => string(4) "male"
  'name' => string(5) "Vasya"
  'weight' => int(5)
}

// а вот обратно - проблема класс stdClass
var_dump((object) $cat_array);
// выведет
class stdClass#8 (3) {
  public $sex => string(4) "male"
  private $name => string(5) "Vasya"
  public $weight => int(5)
}
Есть ли какой то ПРОСТОЙ способ сделать так что бы класс был не stdClass а нужный нам Cat?

Вариант: можно написать PHPDoc и указать класс Cat для переменной, но хотелось бы настоящий объект а не подделку. Ведь есть такие вещи как instanceof и значения полей в классе по-умолчанию и хотелось что бы они работали
 

riff

Новичок
PHP:
class Cat{
    public static function assign($values) {
        $class = new self;
        foreach($values as $key => $value){
            $this->{$key}= $value;
        }
        return $class;
    }
}
$cat = Cat::assign($my_arr);
 

ChAk

Новичок
riff, извиняюсь что плохо сформулировал вопрос. Выделил слово "простой" думал этого достаточно.
Уточная просто это значит в одну строку, при том желательно нативными средствами, разумеется я сам могу написать фукнцию которая это делает, точнее уже написал, но хотелось знать может быть есть способ проще. Ну и конечно класс Cat нельзя ни чем дополнять это просто замена массива не каких методов там не должно быть.
 
Сверху