php,天下上最好的措辞
php是一个很不错的编程措辞,广泛运用于web互联网领域,而PHP的框架,则会提高你的开拓效率,而自己动手搭建属于自己的框架,则更是百利而无一害。建议大家一起来搭建这样的框架,虽然是“造轮子”,但写框架的造轮子的目的不是为了造轮子而是为了在造轮子的过程中熟习其工艺,总结轮子特点,更好的利用轮子。
开拓属于自己的框架
二、概述框架
【01 当前框架】:
首推 Laravel ,其次是 Yii,Laravel 的设计思想以及在工程实践上的支持,超过 ThinkPHP 好几个世代。如果说原生的 PHP 是火枪, ThinkPHP 便是来福枪,Lavavel 则是冲锋枪。你要打猎的话,带把来福枪完备足够了,但是要上沙场,非得更自动化的冲锋枪弗成。
php框架霸占率
可见大家对Laravel的推崇,实际上,我也没用过Laravel,然心神往之,我用过CI框架,以为小巧优雅,很带劲,ThinkPHP则是海内的一些创业公司和开源项目利用的多,也还不错。现在的公司利用的自己的框架,MVC是一定的,还有分层,事情单元和ORM,现在又引入命名空间,composer管理,可以说也是与时俱进,挺不错的。
【02 利用框架的好处】:
1)Composer 做包管理
2)标准的 Autoload 实现,可以让 `include xxx.php` 成为历史
3)各种依赖注入(把创建工具的权利交给框架)
4)ORM 支持
5)好用的命令行和脚手架
6)丰富的文档和生动的社区
三、开拓自己的框架
我的框架,目前是一个很大略简陋的php的框架,后面持续更新添补中。
框架的整体示意图
【01 框架整体】:
首先自己总结一下PHP的MVC框架的事情流程:
大略来说,它以一个入口文件来接管要求,选择路由,处理要求,返回结果。
当然,几句话总结完的东西实际上要做的事情很多,PHP框架会在每次接管要求时,定义常量,加载配置文件、根本类,根据访问的URL进行逻辑判断,选择对应的(模块)掌握器和方法,并且自动加载对应类,处理完要求后,框架会选择并渲染对应的模板文件,以html页面的形式返回相应。在处理逻辑的时候,还要考虑到缺点和非常的处理。
我的框架IFrame的入口文件index.php
【02 命名空间&自动加载】:
1) 命名空间: 办理类名重复问题。
2) 自动加载:避免很多include,办理类之间的依赖关系,让你在实例化一个类时,不用关心他所依赖的类,由于利用spl_autoload_register()函数,它可以注册多个函数来代替__autoload函数的功能,我们传入一个函数名为参数,spl_autoload_register会将这个函数压入栈中,在实例化一个当前路径内找不到的类时,系统将会将函数出栈依次调用,直到实例化成功。
路由选择,实在质是根据当前定义的全局URL模式选择得当的方法来剖析传入的URI,加载对应的类,并实现对应的方法。
路由类Route
【03 视图实现】:
访问链接是: http://iframe.com/index/testview , 掌握器是app/controller/indexcontroller.php , 视图文件是 app/view/testview.html , 赋值方法 assign(),展现方法display() 继续于父类 coreIframe 。
全体实现是比较大略的,后续要实现的功能,比如安全过滤,拦截器,钩子之类的后续实现。
掌握器和视图文件
【04 模型实现】:
这个模型的实现不是很彻底,由于在掌握器内涌现了sql及干系的查询,标准的写法是写一个index的model,调用个中的方法,进行数据库干系的操作。数据库的配置当然也可以走配置类。
后续改进的地方:
✔️实行的sql都可以打印出来
✔️可以支持多个数据库的配置链接
✔️实现ORM,实体的增编削映射到数据库中。
数据库模型实现
【05 composer包管理】:
composer是一个php的第三方资源的包管理,很盛行,在框架Laravel中也有实现,本日我们也在低廉甜头的框架IFrame中利用composer。须要做下面的三部事情:1)下载 2) 安装 3)利用
1)下载composer:
curl -sShttps://getcomposer.org/installer| php
下载后是一个 composer.phar 二进制包
2)创建composer.json文件:
内容如下:
composer.json
改成海内的镜像包,否则会很慢,参考:https://pkg.phpcomposer.com/
composer.json中末端加上 repositories 的声明项。
3)天生包含第三方类库的vendor文件夹:
composer.phar install
然后在框架的入口文件index.php中加上上面的代码,就能利用第三方的类库了。
include(\"大众vendor/autoload.php\公众);
例如我这里加载的第三方的输出类 symfony的var-dumper,利用其打印函数 dump(),打印结果有点shell黑底白字的风格,同时支持折叠,还是很赞的。
四、写在末了
本文实现了一个很大略,乃至可以说很简陋的框架,框架本身不主要,关键是理清框架的思路,加深对web开拓的理解,同时将一些盛行的技能,如composer利用个中,还是不错的。后续该框架还会不断更新改进,期待着大家分享自己的框架,加油吧,phper !