Привет! Хочу рассказать о интересном классе в 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