制作自己的MVC框架(三)——应用
一、数据库操作
目前封装了两种数据库,“MongoDB”和“MySQL”,用到了一次接口“IDatabase.php”。
namespace library\db; interface IDatabase { public function connect($database); }
为了方便增删改查,给两种数据库封装了统一的方法,query、getCount、add、getRowById等。
将demo用的数据库文件放在了“db”内。
二、辅助函数、常量与字典
1)辅助函数
这个是参考了CI后加进来的,有时候老是初始化某个类再调用很不方便,直接是函数的话,引用就快捷。
目前就三个,文件、正则和域名的操作,里面也没几个方法,可扩展。
2)常量与字典
常量的应用,例如订单的状态,可以用数字1,2或3等,而如果直接赋这种数字,不容易理解,并且万一修改了一个状态意义。
那就有潜在危险了,可能赋值比较分散,不能完全修改过来。
但如果作为一个变量预先设置好,即使改了也没关系,只是层引用关系。
class ConstEnum { const Status_Normal = 1; const Status_Delete = 0; //字典 public static $Enum_Select = [ ['1'=>'正常'], ['0'=>'错误'] ]; }
而字典的话,例如订单状态的下拉框,直接引用这个字典再输出,比每次都重新设置要快捷许多。
三、工具类
框架中会有许多工具类,例如分页、Session、过滤、Curl等。我这边就简单的封装了几个而已。
其中“Weixin”开头的两个文件是专门用于微信开发的,曾经写过四篇文章,专门讲《微信开发》。
四、控制器
1)类库
“core/Controller.php”中做的是核心工作,渲染模版、返回JSON数据等。
“controller/Web.php”是某个业务中的通用控制器,继承自“Controller.php”中。
2)项目
app中可以包含多个项目,例如下面的“admin”和“weixin”,包含多个项目可以复用“library”中的代码。
在“weixin”文件夹中包含了四个文件夹。
1. “conf”是配置文件,前面说过的,三种环境有三种配置。
2. “controllers”中是控制器,命名我做了规定,一定要“Controller”结尾。
3. “layouts”是通用模版,例如head、footer等部分,很多页面可以复用。
4. “views”中就是视图了。
除了这些,还有“third”第三方库的引入,“service”通用业务逻辑的封装。
如果要封装自己的业务层,其实就是新加一个文件夹而已。
以上这些也只是按照我的思路做的封装,都是对第一篇文章《粗暴的实现》的扩展。
框架下载:
https://github.com/pwstrick/PrimusPHP
相关文章
- 隐私计算-Oblivious Transfer算法理论研究与实践
- 借助5G智能网关实现无人化智慧农业应用
- 代码要写到100岁--mysql之父monty见面会有感
- 【Java面试】毕业季高频面试题String,StringBuffer好和StringBuilder的区别
- 这道面试题难倒了80%的程序员:谈谈你对Netty中,Pipeline工作原理的理解?
- Java高频面试题,谈谈你对OAuth的理解,这道题你会了吗?
- 惊呆面试官的回答:HashMap和TreeMap的区别
- 这么回答面试通过率提高60%,谈谈你对RPC框架的理解
- 一次性带你搞明白面试必问题,谈谈你对ES的理解
- 级别太高,架构师面试题,谈谈你对IaaS、PaaS、SaaS的理解
- 遇到刁钻面试题如何回答Java中,4种对象引用之间的区别是什么?
- 面试官问:Spring中有几种依赖注入的方式?你能答出来吗
- 离谱!面试都这么问?那不得满分回答,谈谈你对Swagger工作流程的理解?
- flutter系列之:移动端手势的具体使用
- python字符串,用json.dumps后,转化为json字符串,里面存在转义字符了,咋整?
- web移动端实现打电话和保存到电话簿功能
- PHP设计模式 - 门面模式(Facade)通俗易懂 / 友好示例代码
- 多任务学习优化面临的问题与解法
- 听说面试官喜欢问这些MySQL知识
- 面试官最喜欢问的Redis知识