本篇文章给大家一分钟学会如何用PHP搭建自己的web框架?(分享)有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。
这里讲的WEB是指运行在apache下的PHP WEB程序。
首先要理解PHP在apache下的运行机制和请求的生命周期。
PHP是脚本语言,它的执行过程就是从文件入口,一直到文件的最后的结尾,其中可以包含或引用其它文件,是面向过程的。在过程当中,可以使用对象来实现各种需要的逻辑处理。你可以把一个或者多个对象拿来完成所需要的功能,你也可以告诉一个对象你要完成什么功能,这是面向对象的开发方法,也是普遍的开发方法。所以,在面向过程的运行机制中,使用面向对象的开发方式。
每一个HTTP请求的生命周期也是从入口开始,直到程序结束,其中的变量将不复存在,不同的HTTP请求的变量都是独立互不影响的。我们可使用global声明、$GLOBALS全局数组变量、static静态变量在同一HTTP请求中共享数据;使用session来实现会话级别的共享;使用缓存来实现站点全局数据共享。global声明一般在方法中,在面向过程的开发中使用,平时不会用到。$GLOBALS和static经常会用到,但不能直接操作,而是在对象里或专门的方法来管理,比如常用的单例模式使用$GLOBALS和static保存。
PHP程序中,我们都会考虑尽量使框架简洁、高效、清晰、易用,这对开发和维护都很有好处。
基本的程序模式使用MVC模式,分层分模块、同时需要一个好用的URL router配合MVC。
URL router:很关键的一个组件,决定着源码文件的组织结构、代码的清晰度。一个好的router,能方便地找到逻辑入口,体现框架的易用性。
Model: 一直用数组。用数组主要担心数组内容不清楚,在项目中,属性参考数据库字段,因此数组内容还是相对明确的,Model的操作使用数据访问层DAO封装。数据库访问中,直接转化为数组形式,也比较高效。对于其它系统的交互数据对象,一般有接口文档定义。对于ORM中的Active Record技术,能不用还是不用的好。
View: 开始使用smarty,但在性能报告中,smarty执行的方法耗时占比太多太多,后来使用tmd_tpl,就一个文件,简单易用高效,易修改。在视图模板中,结合PHP语法,并辅于模板变量。MVC的思想是分离,并不代表不能在View中使用PHP语法。如果是API接口,可以直接把数据转化为具体格式结果并返回。
Controller: 或者action,代表着一个行为、一个方法、一个接口。只有一层的controller往往是不够用的,一般要分成接口层、业务层、数据访问层,可能还需要通信层。接口负责参数校验、接入权限控制,调用具体的业务,最后返回数据或显示页面等。所有的业务最好都以接口层开始,在这之前应只做框架方面的事情,当我们需要阅读某个业务实现时,只要顺着接口层入口开始读即可。业务层是执行实际的业务功能,业务层从数据访问层获得数据并进行业务上加工处理。数据访问层从数据库或调用接口获取数据,可进行简单的数据转换处理。如果PHP只是作为数据展示前端,后端由C/C++/GO等执行业务,那只需要封装业务层,在业务层里把数据请求到后端,然后返回给接口层。
便宜美国vps
以上是程序的基本框架结构,或者说是业务的流程结构,通常作为系统最重要的部分。但离实用还有距离,还有很多基础功能要增加,比如session的处理,数据库访问,日志处理等功能。这些基本功能一般是可以独立于框架的,可以在不同的框架上应用。功能类不要与框架耦合太紧,一般使用组合方式。我们将这些基础功能按照用起来顺手的方式封装成核心类,使用单例或多例来调用,或对类进一步封装成全局使用的方法,方便使用。
如上图,中心把握好、梳理好了,体现的是业务能力,因为随着业务发展,自然会形成业务分层的结构;而周边结合得好,体现的是框架能力,如何用得/开发得舒适顺手的问题。
在调用功能类或者业务类时,都会涉及到类的加载或导入问题。那是否使用自动加载功能呢?根据个人体验和IDE支持程度,我觉得不直观,对IDE不友好,如F3找不到定义的方法,这是我们开源系统学习的感受,还有对性能的影响。还是直接require/include方便,虽然多写了些代码,但确实对开发维护阅读带了极大的方便(除了修改名称后导致引用变更不很方便,但可通过全局搜索来修改)。一些公共的类在入口里全局引用,业务类按需引用。性能损失?因为业务大部分时候都是垂直的,一般使用require/include即可,不需要require_once/include_once,即使多使用几个once也没什么关系,首先可保证正确性,且程序总体性能不是这个决定的。自动加载会增加很多判断、指令还有栈操作,文件的查找、损失的性能
本文来源网站:info110.com,若侵权,请联系删除。