Приветствую! В движке Yii если создать модель yii\base\Model то к её свойствам можно обратиться: Код (Text): $model1->getAttributes() что вернёт : Код (Text): Array ( [id] => 0, [username]=>'Ivan', [email]=>'ivan@mail.com' ) То же самое можно получить с помощью : Код (Text): $model1->attributes что сделано в фреймворке Yii с помощью __get(): Код (Text): public function __get($name) { $getter = 'get' . $name; if (method_exists($this, $getter)) { return $this->$getter(); } elseif (method_exists($this, 'set' . $name)) { throw new InvalidCallException('Getting write-only property: ' . get_class($this) . '::' . $name); } throw new UnknownPropertyException('Getting unknown property: ' . get_class($this) . '::' . $name); } Вопрос : Для чего это нужно? Зачем такая возможность?
__get(): - это магический метод в рнр https://www.php.net/manual/ru/language.oop5.magic.php в своём приложении лично я их не использую ,да и в известном расширении dektrium их не заметил, обхожусь без них Код (Text): public function getTimeZone() { try { return new \DateTimeZone($this->timezone); } catch (\Exception $e) { // Default to application time zone if the user hasn't set their time zone return new \DateTimeZone(\Yii::$app->timeZone); } } /** * Set the user's time zone. * @param \DateTimeZone $timezone the timezone to save to the user's profile */ public function setTimeZone(\DateTimeZone $timeZone) { $this->setAttribute('timezone', $timeZone->getName()); } /** * Converts DateTime to user's local time * @param \DateTime the datetime to convert * @return \DateTime */ public function toLocalTime(\DateTime $dateTime = null) { if ($dateTime === null) { $dateTime = new \DateTime(); } return $dateTime->setTimezone($this->getTimeZone()); } Когда у меня выдало такую ошубку насчёт __get(); я просто добавил в ненспэйсы путь. и прописал в модель. что то типо этого public function getProfile() { return $this->hasOne(Profile::className($id = null), ['user_id' => 'id']);//!-нужна для вывода профиля картинок }
Так Макарову (на данный момент главному разрабу фреймворка) захотелось Мне нравится, например, использовать магические свойства. Некоторые предпочитают прямые вызовы геттеров. Видимо, чтоб был у программистов выбор А Laravel тебя вообще в другой класс иногда магией закидывает, так что этот момент в Yii2 достаточно прозрачный
samdark ,а да я читал что он пишет? https://yiiframework.ru/forum/viewtopic.php?t=37673 Честно не вижу смысла так заморачиваться у меня и так всё работает , есть задачи по актуальней.