Cet article vous présente l'annotation correcte @return pour permettre à PHPstorm de renvoyer dynamiquement la classe. Elle a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère que cela vous sera utile.
La scène est comme ceci. Il y a un BaseModel (hérité d'ActionRecord), tous les autres modèles en héritent, et puis il y a une méthode dedans. Collez simplement le code de cette classe : <.>
class BaseModel extends ActiveRecord { protected $temp_model; public function getCacheModel() { return $this->temp_model; } }
À ce moment-là, le problème est survenu. Lorsque j'ai retiré cet objet, PHPstorm n'avait aucune invite (telle que des invites de méthode, des invites d'attribut, etc.). Selon la situation générale, il me suffit d'ajouter l'annotation @return. devant la méthode.
/** * @return static */ public function getCacheModel() { return $this->temp_model; }
Un objet de la classe où cette valeur a été consommée , si
hérité, il représentera la classe enfant (voir liaison statique tardive dans.
le manuel PHP).
L'objet de la classe qui consomme cette valeur, s'il est hérité il représentera une sous-classe.
(voir Liaison statique tardive dans le manuel PHP).
Un objet de la classe où ce type a été utilisé, s'il est hérité, il représentera toujours la classe où il a été défini à l'origine.
$ this
Cette instance d'objet exacte, généralement utilisée pour désigner une interface fluide dans sa classe.
L'idée générale est que c'est similaire à static, mais lorsque la méthode de la classe parent est appelée par la sous-classe, elle renvoie toujours la classe parent.
Semblable à soi.
Mais à ce stade, mon problème n'est toujours pas résolu. Peu importe ce que je modifie la valeur de @return, BaseModel est toujours renvoyé, même si j'imprime self::className() dans ce getCacheModel(). méthode. ce qui apparaît est le nom de la sous-classe.
Nous continuons donc à regarder ci-dessus. Je l'ai appelé dans le contrôleur. Le code du contrôleur est le suivant :
$model est obtenu en appelant $this->goCheck()
Jetons un coup d'œil à la méthode goCheck :public function actionCommitReward() { $model=$this->goCheck(new TakeRewards(['scenario'=>'commit_reward'])); //获取实际要修改的数据 $reward = $model->getCacheModel(); }
return $model;
.//验证参数是否合法 public function goCheck($model, $dada = '') { $data = $this->postData;//post传入的数据 if ($model->load($data, '') && $model->validate())//数据效验
else (new PublicFunction())->returnWayTip('1001', PublicFunction::getModelError($model));//这里理解成抛异常 }
/** * @param object $model * @param string $dada * @return model1|model2 */
Bien sûr, vous n'êtes pas obligé d'écrire des commentaires, vous constaterez alors que toutes les invites ont disparu.
Cette fois, j'ai vraiment réalisé l'importance des commentaires. . . Il s'avère que la raison pour laquelle PHPstorm vous invite est parce que tout le monde a écrit des commentaires conformément aux spécifications PHPDoc ! Enfin, certains étudiants peuvent se demander, pourquoi ne pas mettre la méthode goChekc dans BaseModel ? Oui, en fait, l'approche standard devrait être comme ceci, mais parce que j'ai attribué Yii::$app->request->post() à $this->postData dans le contrôleur (bien que cela soit pratique) Diudiu), et certaines opérations telles que l'échange de jetons contre l'identifiant ont été attribuées manuellement, il n'y a donc aucun moyen car les postData ne peuvent pas être obtenues dans le modèle. Bien sûr, vous devez les déplacer, mais vous devez transmettre des paramètres à chaque fois. ;postData, c'est une question d'opinion.
Cependant, ces deux méthodes ne sont pas standardisées. $this->postData = Yii::$app->request->post(); devrait être d'utiliser Yii::$app->request->post($name,$dafaultValue) pour attribuer des valeurs aux données de publication.
Enfin, comme je ne l'écris pas seul, je ne peux pas apporter de changements drastiques et je ne peux que l'optimiser autant que possible.
Articles connexes recommandés :
Le retour de la fonction récursive php ne parviendra pas à renvoyer correctement la valeur souhaitéeDans les méthodes PHP qui renvoie les types de référence, php renvoie les types de référence
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!