Point de départ : je comprends personnellement que développer son propre framework est aussi un moyen d'exercer son caractère natif. Après l'avoir écrit, il sera beaucoup plus facile de regarder d'autres frameworks. Si vous rencontrez un framework qui n'a pas de documentation ou très peu de documentation, vous pouvez suivre cette idée et l'ajouter. Ou apportez simplement le natif et faites-le. C'était le cas lorsque je suis entré en contact avec yii2, j'ai commencé à travailler sans même avoir le temps de lire la documentation. C'était fondamentalement purement natif et j'utilisais le csrf et le double langage. de yii2....
Réception et impression des paramètres . Par exemple, la méthode d'obtention du fichier de configuration est basée sur les paramètres transmis.
1. Généralement, il est d'abord déterminé si le fichier existe. S'il existe, il doit être inclus, et s'il doit être nouveau, il doit être nouveau. Enregistrez-le ensuite dans les attributs (mise en cache)
2. Principalement le processus d'appel : mettez tout dans la méthode run
1. Écrivez le fichier d'entrée (les étapes 2 à 5 sont toutes écrites dans le fichier d'entrée)
2. Définissez des constantes (qui sont des répertoires à chaque niveau du framework, vous n'avez donc pas besoin d'écrire une longue liste à chaque fois)
//定义框架根目录 //定义核心文件目录路径 //应用目录(包含控制器、模型等) //是否开启调试 //如果DEBUG为true,将错误显示打开。否则不显示
3. Introduction de la bibliothèque de fonctions
//加载公共方法 //加载核心文件
4. chargement
Déterminez si la classe à charger existe. Astuce : Il a été enregistré dans l'attribut. En fait, il est jugé par cet attribut.
Renvoie vrai s'il existe ; si
n'existe pas, chargez-le. Astuce : Remplacez la barre oblique inverse
Si vous souhaitez charger un fichier, incluez-le simplement. Remarque : Ce fichier se trouve dans le répertoire racine
Sinon, il renvoie false
Remarque : Après l'écriture, créez le répertoire lib et introduisez le routage classe. Test
5. Framework de démarrage
//调用核心文件中的run方法(我的核心文件是core/init.php)
6. Trilogie d'analyse d'itinéraire
6.1. 🎜>
6.2. Obtenez les paramètres de l'url S'il existe, analysez Dans des circonstances normales, convertissez-le d'abord en tableau (pour faciliter le traitement) et vérifiez l'anomalie situation (telle que : uniquement dans l'url Le contrôleur a été saisi et il n'y a pas de méthode de saisie. Donnez à la méthode une valeur par défaut) Paramètres supplémentaires sur l'url Situation normaleSituation anormale, il est entré C'est un nombre impair Il n'y a pas de valeur par défaut 6.3 Renvoie le contrôleur et la méthode correspondants (en fait, il est enregistré dans l'attribut en 6.2. , qui est considéré comme renvoyé)
7. Chargez le contrôleur
Lorsque run(), chargez le contrôleur et épelez le nom du contrôleur analysé par l'itinéraire vers le chemin du fichier du contrôleur. Déterminez si le fichier du contrôleur existe. S'il existe, il sera nouveau. S'il n'existe pas, une erreur sera générée Remarque : Le concept de module est introduit ici. Une application est un module, pas une application, et constitue une couche de moins qu'un framework mature8. Renvoyez les résultats
Exécutez-le et essayez-le. En fait, à ce stade, un cadre de création d'un fichier est terminé. framework9. Connectez la classe modèle dans le contrôleur
Créez une classe modèle dans lib pour la connexion à la base de donnéesCréez une nouvelle classe modèle dans le contrôleur et écrivez SQL pour faire fonctionner la base de données10. Écriture moyenne de la classe View
les méthodes d'affectation et d'affichage sont écrites dans l'initialisation (core/init.php) classe.Remarque : attribuez d'abord la valeur, puis incluez le fichier modèle
, puis le contrôleurhérite de cette classe et l'appelle.
11. Écrire une classe de configuration
Créer une nouvelle classe de fichier de configuration
Méthode d'écriture d'un seul fichier de configuration ( Astuce : Puisqu'ils l'obtiennent, le passage des paramètres est indispensable. 2 paramètres, éléments de configuration, nom du fichier de configuration. Imprimez les paramètres, puis concevez )
//1、判断配置文件是否存在,存在就include //2、判断配置项是否存在,存在直接给缓存到属性中 //3、判断属性中有无缓存,有就直接返回属性中存的
12. Ecrire la classe de journal
/** * 提示:用的是工厂模式的思想: * 1、读取配置文件,获取当前驱动。在初始化方法中new类 * 2、在log方法中,调用不同驱动中的log方法 */
13、使用composer:编写json文件,自己的框架上到github上供人家使用
第1个类库报错的地址:https://github.com/filp/whoops
第2个类库酷炫的打印变量:"s
"symfony/var-dumper":"*"//更帅气变量输出的效果 ymfony/var-umper":"*"//更帅气变量输出的效果
第3个类库数据库的地址:http://medoo.lvtao.net/1.2/doc.php
第4个类库模板引擎的地址:https://twig.symfony.com/doc/2.x/intro.html#installation
镜像网址:https://pkg.phpcomposer.com/
注意:下图很重要
14、使用medoo数据库类
如果自己封装pdo可能会有什么想象不到的漏洞,这样我们就不如直接用现成的类库加载
http://medoo.lvtao.net/
思路:先将原来继承的pdo换成该类库,在封装模型控制器调用
15、模板引擎类库
思路:修改display方法,改成类库的,还有模板布局
剩下其余的扩展就因人而异了,想不到的话,可能去参考成熟的框架
这里写2个封装好的方法
封装post接收方法(给大家做参考思路)
封装跳转方法
更多教程:《php教程》
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!