Что значит конструкция в обращении к классу после Users::model()?

Приветствую. Изучаю php, в yii есть такой код из коробки:
$model=Users::model()->findByPk($id);
В этом коде мы обращаемся к статическому методу model класса Users, а вот что дальше идет?
Видел даже конструкции на подобие Users::model()->findByPk($id)-> ещё что то;

Посмотрел хорошие уроки по ООП PHP, нигде не рассказывается что это такое....
  • Вопрос задан
  • 282 просмотра
Пригласить эксперта
Ответы на вопрос 6
@1Rockman
Прочитайте про цепочки вызовов (Method Chaining).
Ответ написан
Комментировать
DmitriyEntelis
@DmitriyEntelis
Думаю за деньги
судя по коду Users::model() возвращает какой то объект у которого вызывается метод findByPk с параметром $id
Ответ написан
Комментировать
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
User::model - читаем про статические методы. Грубо говоря этот метод через late static binding забирает имя класса, через который мы обратились к этому методу (в примере это User) и запрашивает... что-то типа репозитория (что-то типа, потому что в yii все не как у людей, и репозиторий этот это еще менеджер метаданных и билдер запросов... если упрощать). Далее метод просто возвращает репозиторий для модели с этим классом.

Далее - method chaining. Каждый вызов метода объекта возвращает этот самый объект. Типа конфигурация так производится.
Ответ написан
Комментировать
@GreatRash
Паттерн Singleton походу.
Ответ написан
@kedavra
code berserker
Users::model() возвращает объект у которого есть метод findByPk($id), и он тут же вызывается. Откройте класс Users и посмотрите что и как там внутри работает.
Ответ написан
abler98
@abler98
Software Engineer
Это такой синглтон

public static function model($className=__CLASS__)
	{
		if(isset(self::$_models[$className]))
			return self::$_models[$className];
		else
		{
			$model=self::$_models[$className]=new $className(null);
			$model->attachBehaviors($model->behaviors());
			return $model;
		}
	}


А вот метод findByPk
public function findByPk($pk,$condition='',$params=array())
	{
		Yii::trace(get_class($this).'.findByPk()','system.db.ar.CActiveRecord');
		$prefix=$this->getTableAlias(true).'.';
		$criteria=$this->getCommandBuilder()->createPkCriteria($this->getTableSchema(),$pk,$condition,$params,$prefix);
		return $this->query($criteria);
	}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы