Класс \yii\base\Object в Yii2

Привет! Хочу рассказать о интересном классе в yii2 с довольно таки простым названием — Object. Если вы уже какое то время программируете на этом фреймворке, думаю для вас не секрет что от этого класса наследуются все классы фреймворка. Как и для чего — подробнее в этой статье.

Магические методы _get, _set.

Дело в том, что данный класс содержит в себе интересную реализацию, которая позволяет превратить методы класса который не содержат аргументов и начинаются на get* в свойства. Как это работает: у вас есть метод класса, например getSomeVar() который возвращает какое либо значение. В любом наследнике класса Object будет доступен следующий вызов: $obj->someVar, что позволит получить доступ к результату выполнения функции. Это бывает очень удобно и в целом делает код более красивым. Аналогичная ситуация с методами set* для присваивания значения.

Конструктор класса

Это на мой взгляд, самая полезная фича которую только могли встроить в фреймворк. Конструктор данного класса может принимать асоциативный массив, который потом распарсен и по соответствующим ключам будут установлены определенные свойства данного класса. Полагаю, что текстом это не очень понятно, поэтому давайте приведу пример:

namespace app\some;

class Some extends \yii\base\Object
{
    public $attr1;
    public $attr2;

    public function foo()
    {
        var_dump($this->attr1, $this->attr2);
    }
}

(new Some([
    'attr1' => 'somevalue',
    'attr2' => 'somevalue2',
]))->foo();

// somevalue, somevalue2

В данном примере в конфиг передается массив который заносится в атрибуты объекта, затем метод foo() выводит значения атрибутов в демонстративных целях.

Получнеие имени класса

В данном классе есть метод который позволяет получить имя класса Object::className(). В примере выше этот метод вернул бы: app\some\Some