Maison >cadre php >PensezPHP >Analyse du scénario de classe de base de données de requête de base de données ThinkPHP

Analyse du scénario de classe de base de données de requête de base de données ThinkPHP

咔咔
咔咔original
2021-01-11 12:08:251833parcourir
«

Enfin, nous arrivons à la fin de l'analyse du framework.

Avant-propos

Il existe de nombreux modèles utilisés dans le processus de développement quotidien, mais dans le processus de développement, je sais seulement comment l'utiliser, mais je ne sais pas comment il est implémenté en interne. Le modèle est quelque chose qui est utilisé quelle que soit l'interface ou le backend.

Concernant la tendance générale à la séparation des vues front-end et back-end, la plupart des vues du framework sont toujours utilisées pour le développement back-end.

Cet article approche également de la dernière étape de l'interprétation du framework. Ensuite, Kaka amènera tout le monde à apprendre les mystères de la classe Db dans le framework.

L'image ci-dessous montre la carte cérébrale fournie par Kaka. Vous pouvez lire des articles basés sur cette carte cérébrale.

Analyse du scénario de classe de base de données de requête de base de données ThinkPHP
Processus d'exécution de la base de données

Analyse de la correspondance entre les classes d'opérations Db et les autres classes

Ce que vous devez savoir avant d'apprendre le modèle, c'est la classe DB, qui fonctionne également sur la base de données.

Il existe un tel fichier de configuration dans le framework. Dans ce fichier de configuration, il y aura une série d'informations sur la configuration de la base de données.

Dans le prochain processus, Kaka créera également simplement une base de données à des fins de démonstration.

Analyse du scénario de classe de base de données de requête de base de données ThinkPHP
Fichier de configuration de la base de données

Il existe également deux classes dans la couche principale du framework, à savoir la classe Db et la classe Model. Ces deux classes sont l'analyse suivante. objets.

Analyse du scénario de classe de base de données de requête de base de données ThinkPHP
Deux classes que la couche principale du framework doit connaître

Avant d'analyser la relation correspondante entre la classe d'opération Db et les autres classes, nous créons d'abord une base de données à titre de démonstration.

Analyse du scénario de classe de base de données de requête de base de données ThinkPHP
Base de données de démonstration

Tout d'abord, jetons un coup d'œil aux informations sur la classe Db.

Analyse du scénario de classe de base de données de requête de base de données ThinkPHP
Commentaires sur la classe

Grâce à l'image ci-dessus, nous pouvons voir une partie des informations sur la classe Db, qui sont quelques méthodes de requête utilisant la classe Db .

Mais quand vous arrivez à la fin du cours Db, vous pouvez voir une méthode familière __callStatic.

Analyse du scénario de classe de base de données de requête de base de données ThinkPHP
Appeler une méthode statique non déclarée

Cette méthode devrait être familière aux lecteurs qui ont lu les articles de Kaka. Cette méthode est dans l'analyse du code source de façade An. un examen approfondi est fourni dans cette section.

La seule chose à retenir à propos de cette méthode est qu'elle sera appelée lorsqu'une méthode statique non déclarée sera appelée.

Quant à l'utilisation de call_user_func_array, cette fonction peut être comprise car cette méthode est une fonction intégrée et peut être directement appelée pour exécuter la fonction, c'est-à-dire que la méthode peut être exécutée directement.

Analyse du scénario de classe de base de données de requête de base de données ThinkPHP
Le code source de la classe façade

Lorsque vous venez de regarder les informations d'annotation de la classe Db, vous pouvez voir que la classe Db utilise le Connection classe, qui est la classe de base de données de connexion.

Analyse du scénario de classe de base de données de requête de base de données ThinkPHP
Classe de base de données Connect

Entrez dans cette classe et regardez simplement le constructeur. La séquence d'exécution sera expliquée ci-dessous.

Analyse du scénario de classe de base de données de requête de base de données ThinkPHP
Créer un objet Builder à partir du tableau de configuration de la base de données

Il existe deux scénarios principaux pour faire fonctionner le contrôleur dans le framework. Le premier est le fonctionnement de la classe Db, et le second est le fonctionnement du modèle.

Où Connection· est le connecteur, Query est la requête, Builder est le générateur SQL et exception est la classe d'exception.

Connaître les informations ci-dessus sera utile dans le prochain processus de compréhension. Dans la section suivante, le scénario de la bibliothèque de classes Db sera analysé.

2. Analyse du scénario de la bibliothèque de classes Db

Analysons-le d'abord à partir d'un cas simple de données de base de données.

Analyse du scénario de classe de base de données de requête de base de données ThinkPHP
Données de simulation de base de données

Ensuite, accédez au contrôleur et écrivez un cas de requête simple. Utilisez la commande pour créer un contrôleur de test avant de créer le contrôleur.

Analyse du scénario de classe de base de données de requête de base de données ThinkPHP
Contrôleur de test créé

Effectuez des requêtes simples sur des données dans ce contrôleur.

Analyse du scénario de classe de base de données de requête de base de données ThinkPHP
Utilisez un cas simple pour interroger les données de la base de données

Les résultats de la requête sont les suivants

Analyse du scénario de classe de base de données de requête de base de données ThinkPHP
Les résultats de la requête

Dans ce cas, vous pouvez voir que la méthode de requête Db::query est utilisée. Ensuite, nous procéderons à une analyse simple de cette méthode de requête.

Ensuite, le processus d'exécution viendra à la classe Db. Dans cette classe, vous pouvez voir que lorsque l'objet accède à une méthode statique inexistante, la méthode __callStatic() sera automatiquement appelée.

Cette méthode a été expliquée en profondeur dans l'explication précédente de la façade.

Analyse du scénario de classe de base de données de requête de base de données ThinkPHP
Méthode d'appel statique dans la classe Db

Comme vous pouvez le voir sur la figure ci-dessus, lors de l'exécution d'une méthode statique qui accède à un objet inexistant, elle sera exécuté sur call_user_func_array调用回调函数,并把一个数组参数作为回调函数的参数

Ensuite, le code sera exécuté sur la ligne de code static::connect() Puisque ce type de base de données n'hérite d'aucune classe, l'utilisation de static consiste à appeler cette classe.

Si la classe Db hérite d'autres classes, il y aura une certaine différence. Cette différence concerne le mot-clé static, je vais vous donner un peu de connaissances impopulaires à ajouter lorsqu'une classe hérite d'une classe. Lorsque la classe parent utilise le mot clé static, la méthode de la sous-classe est appelée par défaut.

Changer de connexion à la base de données

Comme il n'y a pas d'héritage, vous arriverez à la méthode de connexion de cette classe.

Dans cette classe, le résultat sera d'abord renvoyé sous forme d'informations de configuration de la base de données.

obtiendra alors l'index query à partir des informations de configuration, et renverra enfin la chaîne thinkdbQuery Il faut noter ici que la chaîne renvoyée n'est pas une instance de cette classe.

Ensuite, la troisième étape sera exécutée pour créer une instance d'objet de connexion à la base de données. Cette étape sera analysée ensuite.

Analyse du scénario de classe de base de données de requête de base de données ThinkPHP
Changer de connexion à la base de données

Ensuite, vous arriverez au fichier 实际执行的为 new thinkdbQuery, et enfin reviendrez pour exécuter la requête et renvoyer l'ensemble de données, le retour data est 返回 object(thinkdbQuery)

À propos de ceci $this->connection est défini dans le constructeur de cette classe.

Analyse du scénario de classe de base de données de requête de base de données ThinkPHP
Exécuter la requête et renvoyer l'ensemble de données

Jetons un bref coup d'œil à ce constructeur Dans ce constructeur, l'attribut connection est défini directement. valeur, afin qu'il puisse être utilisé dans l'image ci-dessus.

Analyse du scénario de classe de base de données de requête de base de données ThinkPHP
Définir la connexion

Une fois l'exécution terminée ici, la valeur renvoyée sera appelée à la méthode statique non déclarée qui a été analysée depuis le début.

static::connect() est la valeur finale renvoyée static::connect() 返回 object(thinkdbQuery).

Analyse du scénario de classe de base de données de requête de base de données ThinkPHP
Appel de méthode statique

Ainsi, le code suivant sera exécuté sur la méthode de requête de thinkphp/library/think/db/Query.php

$sql est l'instruction SQL passée dans Db::query() et exécute la requête pour renvoyer l'ensemble de données

Le dernier morceau de code exécutera la méthode de requête de thinkdbconnectorMysql

Analyse du scénario de classe de base de données de requête de base de données ThinkPHP
Exécuter la requête et renvoyer l'ensemble de données

Ensuite, venez à la méthode de requête de thinkdbconnectorMysql

Dans cette méthode, trois choses principales sont effectuées.

  • $this->initConnect Initialiser la connexion à la base de données
  • $this->PDOStatement->execute(); Exécuter la requête
  • return $this->getResult($pdo, $procedure); Renvoie le résultat set
Analyse du scénario de classe de base de données de requête de base de données ThinkPHP
Exécuter la requête et renvoyer l'ensemble de données

Parse $this->initConnect Initialiser la connexion à la base de données

Dans cette méthode, vous pouvez voir que les informations de configuration sont obtenues. Tout d'abord, vous devez comprendre quelles sont ces informations de configuration.

Analyse du scénario de classe de base de données de requête de base de données ThinkPHP
Initialiser la connexion à la base de données

Cet élément de configuration est configuré dans la base de données du fichier de configuration. D'après les informations fournies dans les commentaires, vous pouvez voir qu'il l'est. principalement sur l'ensemble des serveurs maître et esclave.

Généralement, les informations maître-esclave ne sont pas configurées dans le framework. Ici, nous n'analyserons pas comment le framework implémente la configuration maître-esclave de la base de données.

Analyse du scénario de classe de base de données de requête de base de données ThinkPHP
Méthode de déploiement de la base de données : 0 centralisé (serveur unique), 1 distribué (serveur maître-esclave)

Un jugement a été porté dans ce jugement L'ID de la connexion actuelle à la base de données, puis la méthode de connexion à la base de données est exécutée.

Cette méthode renverra éventuellement une information d'instance de l'objet (PDO)#33.

Analyse du scénario de classe de base de données de requête de base de données ThinkPHP
Méthode de connexion à la base de données

$this->PDOStatement->execute();Exécuter la requête

La deuxième chose à faire est d'exécuter la requête. Ensuite, expliquons en détail comment cela est effectué.

Analyse du scénario de classe de base de données de requête de base de données ThinkPHP
Exécuter la requête

Lors du retour de l'instance pdo, cette instance est affectée à l'attribut $this->PDOStatement, elle sera donc exécutée dans la classe PDO.

Une chose que vous devez comprendre ici concerne la méthode d'exécution, qui est utilisée pour exécuter des instructions qui renvoient plusieurs jeux de résultats, plusieurs comptes de mises à jour ou une combinaison des deux.

La troisième chose est de renvoyer l'ensemble de résultats

La dernière étape de l'exécution jusqu'à présent est de renvoyer l'ensemble de résultats.

Les méthodes utilisées ici consistent à interroger la couche inférieure, puis à l'analyser, et le résultat final de la requête sera renvoyé ici.

Analyse du scénario de classe de base de données de requête de base de données ThinkPHP
Obtenir le tableau de l'ensemble de données

Le résultat final sera renvoyé à la méthode __callStatic ici et renvoyé à la variable $res supérieure.

Analyse du scénario de classe de base de données de requête de base de données ThinkPHP
Cas de test
Analyse du scénario de classe de base de données de requête de base de données ThinkPHP
Résultat final de la requête

Jusqu'à présent, le processus d'exécution de l'utilisation de la requête Db a été analysé, mais la méthode encapsulée par le framework n'est pas seulement une requête, d'autres méthodes de requête peuvent être simplement analysées selon le processus de Kaka.

Les derniers processus de cette section seront exécutés à la fin, mais il y aura une petite différence dans l'exécution précédente.

«

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 sa carrière. J'espère que les articles de Kaka dans l'immense Internet. Je peux vous apporter un peu d'aide Silk. 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn