L'adresse de requête de cet article est le nom de domaine configuré.
D'après ce qui précède, nous pouvons savoir que la valeur de $instance
est une instance de appindexcontrollerIndex
.
Cela a également le concept de middleware. Néanmoins, le middleware sera mentionné séparément dans l'article suivant et ne sera pas expliqué ici.
Ici$this->app['middleware']->controller
Lorsque vous utilisez ce code, pouvez-vous encore vous rappeler s'il s'agit d'ArrayAccess ou de __get directement ?
Ici, nous accédons à l'objet sous forme d'accès tableau, nous utilisons donc la forme ArrayAccess. Les deux notions doivent être clairement distinguées.
Ensuite, le nom de la méthode sera obtenu Quant à savoir comment obtenir le nom de la méthode, il se trouve dans l'initialisation de. cette classe La méthode est exécutée. Il vous suffit de savoir que la valeur renvoyée est index
.
Ce à quoi vous devez faire attention ici, c'est cette ligne de code $this->rule->getConfig('action_suffix')
, ce qui est obtenu ici est le suffixe de la méthode d'opération.
À quoi cela ressemblerait-il si nous définissons maintenant une valeur pour ce suffixe de méthode d'opération !
Ajoutez une valeur kaka et accédez-y pour voir quel sera le résultat.
Lors de l'accès à ce moment, il sera demandé que la méthode indexkaka n'existe pas. Est-ce clairement visible? ce paramètre est dans Ajouter un kaka à tous les noms de méthodes.
Une fois l'expansion du code pour obtenir le nom de l'opération actuelle terminée, l'étape suivante est if (is_callable([$instance, $action])) {
, où vous pouvez voir notre vieil ami is_callable
.
Quant aux deux paramètres de is_callable ici, vous savez ce qu'ils sont d'après ce qui précède. Le premier paramètre est l'instance de appindexcontrollerIndex
, et le deuxième paramètre est la méthode d'opération d'exécution de index
.
Ensuite, le rôle de is_callable
est de détecter si le nom de la méthode appindexcontrollerIndex
dans la classe index
peut être exécuté.
Évidemment, un vrai sera renvoyé ici, car il existe une méthode d'index dans la classe index.
Avant de faire le test ici, vous devez annuler le suffixe du nom de méthode que vous venez de configurer dans le fichier de configuration de l'application.
À travers ce is_callable
jugement, il y aura trois situations. Ensuite, Kaka l'analysera sous trois aspects.
Première situation : Il y a une méthode exécutable dans la classe
$vars
final est un tableau vide. Afin de tester ce morceau de code avec des paramètres, nous devons apporter une petite modification à l'adresse de routage.
Le routage n'a pas été utilisé auparavant, mais l'adresse par défaut a été utilisée directement. Cette adresse de routage sera utilisée ensuite
Utilisez cette adresse de routage pour imprimer les données, et vous pouvez voir que ce sont les paramètres de routage que nous avons définis.
Cette méthode d'obtention des variables de requête entrera dans la $this->request->param();
ligne de code
Le framework est Comment obtenir le paramètre
Adresse d'accès : http://www.source.com/index.php/hello/hello
Comme je le sais ci-dessus, il s'obtient via $this->request->param()
Paramètres, alors comment obtenir les paramètres dans le framework ?
Selon le code du processus, l'exécution sera comme indiqué ci-dessous. Utilisez la méthode correspondante pour obtenir les paramètres selon la méthode de requête obtenue. Ce qui doit être clair ici, c'est que nous utilisons la requête get. .
Le code sera donc exécuté vers $this->param
. Les paramètres de la requête actuelle et les paramètres de l'adresse URL sont fusionnés ici.
Puisque Kaka effectue des requêtes en utilisant le routage, le framework encapsule ici spécifiquement un paramètre de requête pour le routage.
Quand vous arriverez à cette route
méthode, vous comprendrez en voyant les commentaires qu'elle sert à obtenir le paramètres de routage, mais vous devez toujours entrer une couche à saisir.
Dans l'article de routage précédent, lorsque les paramètres de routage sont obtenus, les paramètres seront fusionnés dans l'attribut route de la requête.
Donc $this->route
stocke tous les paramètres de cette règle de routage, y compris les paramètres de routage.
À ce stade, le processus d'exécution sera exécuté pour obtenir des variables prenant en charge le filtrage et les valeurs par défaut dans le paramètre $this->route
ci-dessus. transmis est faux , donc cette pièce sera renvoyée directement.
Les résultats renvoyés ici seront renvoyés à l'endroit où nous avons commencé l'analyse ci-dessus, ce qui signifie que ce $vars
est obtenu paramètres de routage.
Deuxième cas : Il n'y a pas de méthode exécutable dans la classe
Lorsque le l'exécution du premier jugement is_callable
détermine que la méthode de la classe n'est pas exécutable, la deuxième situation sera exécutée.
Demandez d'abord une adresse de routage non définie et voyez ce qui sera renvoyé.
Selon les invites données par le code, nous allons au contrôleur d'index pour créer une méthode _empty
, puis la demandons une fois et regardez ce qui se passe.
Il ressort des résultats de l'impression que lorsque la méthode accédée n'existe pas, la méthode _empty
sera exécutée .
Alors, comment cette méthode est-elle exécutée ? Cette méthode d'exécution est obtenue en utilisant le mécanisme de réflexion. Il existe un article spécial pour expliquer la réflexion Kaka auparavant, mais vous devez toujours lire et visualiser le document.
La troisième situation : il n'y a pas de méthode exécutable ou de méthode _empty dans la classe
Cette situation est relativement simple, c'est-à-dire que le message d'erreur est renvoyé directement, le la gestion des exceptions ici sera également abordée plus tard.
Après avoir exécuté les trois situations
Après avoir analysé les trois situations, tout va se passer en fin de compte Pour exécuter des méthodes statistiques.
La méthode d'appel de la classe d'exécution de réflexion prend en charge la liaison de paramètres, ce qui signifie que le processus d'exécution de fermeture ici est terminé ici.
Les requêtes automatiques suivantes sont expliquées en détail dans la section 5.
Dans la section précédente, nous avons expliqué le routage pour trois ou quatre périodes. L'explication finale concernait la planification du routage. Alors, comment le routage défini est-il exécuté ?
Utilisez ensuite cette route comme cas
Vous souvenez-vous de la valeur de retour lorsque vous avez démarré la détection d'itinéraire ? ? Veuillez voir l'image ci-dessous
Il n'y a pas eu de connexion à à ce moment-là, le code est expliqué en détail et explique directement le contrôleur instancié. Ce dont je veux parler maintenant, c'est de la ligne de code 记录当前调度信息
.
Ici $this->request
est utilisé pour exécuter la méthode magique de la classe conteneur lors de l'accès à une propriété inexistante, et renvoie enfin une instance via le conteneur.
Ainsi, le code sera exécuté à la position indiquée ci-dessous, définissant ou obtenant les informations de planification de la requête en cours
En imprimant ici dans l'instanciation du contrôleur, vous constaterez que la valeur renvoyée ici est index
, ceci valeur Il est défini dans le contrôleur. Ensuite, accédez au contrôleur pour le vérifier.
Accédez à la méthode init pour imprimer le résultat et afficher le résultat, en utilisant l'adresse de routage
Savez-vous pourquoi la valeur ici a changé ?
La valeur imprimée ci-dessus est l'image ci-dessous, pourquoi est-ce l'image ci-dessus ici !
La dernière étape de la section de routage consiste à lancer la planification de la route, et enfin à appeler une route vers le module/contrôleur/méthode d'opération.
Cette méthode dispatchModule
instancie enfin une classe. Ensuite, nous devons étudier cette classe en profondeur
classethinkroutedispatchModule
, vous constaterez qu'elle hérite de la classe Module
Dispatch
Dans le contrôleur de cette classe, vous constaterez que la variable thinkphp/library/think/route/Dispatch.php
a été définie. dispatch
À ce moment, je reviendrai sur Comment ladresse de routage ThinkPHP instancie-t-elle le contrôleur ?
Quels sont les paramètres transmis par la méthode ici, haha
La valeur finale est donc simplement imprimée sous la forme d'un tableau séparé.
Ensuite, l'action suivante est la même que le processus de non-utilisation de l'accès au routage, et il n'est pas nécessaire d'analyser.
C'est la fin de la façon dont l'adresse de routage est instanciée.
À propos du passage de $this->app->controller
à index
, le nom complet de la classe est renvoyé. Le processus d'implémentation spécifique ne sera pas analysé. La méthode d'implémentation est $this->parseModuleAndClass
.
Dans la section 4, seules les méthodes du contrôleur d'exécution sont mentionnées. est revenu de l'endroit indiqué sur la photo ci-dessous, mais comment revenir n'est pas expliqué en détail.
Ensuite, je passerai un peu de temps à expliquer comment l'exécuter.
L'adresse de routage d'accès est celle indiquée ci-dessous. Vous pouvez voir que les données renvoyées sont les données qui doivent être renvoyées dans le contrôleur.
La valeur imprimée est le suivant Emplacement de l'image, vous devez être clair ici ! La lecture du code source nécessite un peu d'exploration et, avec le temps, vous comprendrez le contenu.
Ensuite, procédons à une analyse approfondie de la méthode $this->autoResponse($data);
Cette méthode signifie littéralement réponse automatique.
Dans la première ligne de ce processus d'exécution $data instanceof Response
, si vous ne comprenez pas cela, vous ne pourrez pas lisez-le.
Ce que vous ne savez pas et ne comprenez pas doit encore être résolu. Il suffit de lire le code source et de le conquérir petit à petit pour gagner.
À propos de l'utilisation d'instanceof
Instanceof peut déterminer si un objet est une instance d'une certaine classe et si un objet implémente une certaine interface.
Ensuite, Kaka vous donnera un exemple simple pour démontrer cela, et vous comprendrez ce qui se passe.
Cas 1
Créez d'abord deux classes. Le cas est tel qu'illustré ci-dessous.
L'image ci-dessous est le résultat de l'impression. Vous pouvez voir que la première renvoie vrai et la seconde renvoie faux.
détermine si un objet est une instance d'une certaine classe. En d'autres termes, $instance
est une instance de la classe Test
, il retournera donc vrai.
Cas 2
Le cas 2 est différent du cas 1. Une interface est établie, puis la classe implémente le cas d'interface.
Les résultats finaux renvoyés sont tous vrais, ce qui signifie que si une classe implémente une autre interface, ce sera vrai lors du jugement.
Ceci ci-dessus sont les deux cas de démonstration donnés pour instanceof
Les comprendre, c'est juger si une instance appartient à une certaine classe. . Exemple.
Puis revenons au texte, $data instanceof Response
cette ligne de code ne sera définitivement pas établie, car la valeur transmise par les données est la valeur renvoyée par le contrôleur.
Ainsi, le processus d'exécution du code sera exécuté à la position dans l'image ci-dessous. La fonction is_null
est utilisée pour faire le jugement. Le jugement doit être faux, donc le code suivant sera exécuté.
Les deux premiers points de ce code ne seront pas analysés.
La première consiste à identifier automatiquement le type de sortie de réponse par défaut. Il s'agit de déterminer s'il s'agit d'une requête ajax. La méthode d'implémentation spécifique attendra que KaKa analyse le code source du framework cette fois, puis. prenez le temps chaque jour d'analyser le framework. Une petite analyse de quelques méthodes.
La deuxième position consiste à obtenir les informations de configuration correspondantes à partir du fichier de configuration. Elle examine la méthode de la classe de règles qui est exécutée, mais dans la méthode se trouve le code qui est exécuté pour obtenir les informations de configuration.
Ensuite, nous devons analyser le troisième endroit non mentionné ci-dessus, qui est le code$response = Response::create($data, $type);
Venez à la méthode thinkphp/library/think/Response.php
de la classe create
Cette méthode est utilisée pour créer un objet Response.
Il suffit de faire attention à l'endroit encerclé ici. Il n'y a pas de html dans le répertoire thinkphp/library/think/response
.
Le code instanciera donc directement cette classe puis reviendra.
Lorsque vous arrivez au constructeur de cette classe, vous faites principalement quelques choses.
puis le code attribuera la valeur de retour à la variable autoResponse
de la méthode $response
.
Enfin, ce $response
est renvoyé et les informations de retour impriment le résultat comme indiqué ci-dessous.
Ensuite, le code sera toujours monter Le calque revient, revenant à la fonction de fermeture d'origine.
A l'endroit encerclé par le clic, la ligne de code suivante concerne également le middleware. Il faut juste savoir que le résultat final renvoyé est le même que le résultat imprimé sur l'image.
Le résultat final est renvoyé au thinkphp/library/think/route/Dispatch.php
, c'est là que nous commençons l'analyse.
Renvoyer le résultat renvoyé à $data
, puis l'exécuter return $this->autoResponse($data);
vous avez lu c'est vrai, le code ici semble familier !
Le résultat renvoyé à ce moment est une instance de Response
, donc $response
sera renvoyé directement.
Jusqu'à ce point, la méthode dans le contrôleur est exécutée et la réponse est analysée.
Qu'il s'agisse des règles de routage définies ou d'un accès direct à l'aide de la méthode du contrôleur de module, le résultat de la réponse sera finalement renvoyé via la méthode ci-dessus.
«La persévérance dans l'apprentissage, la persévérance dans les blogs et la persévérance dans le partage sont les convictions auxquelles Kaka a toujours adhéré depuis ses débuts. J'espère que les articles de Kaka sur l'immense Internet pourront vous apporter. un peu d'aide. Je m'appelle Kaka, à la prochaine fois
»
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!