PHP框架概论

概述

PHP语言本身是一门脚本语言,虽然其类似于shell、python等这些脚本语言。但其最常见的领域还是web端,目前世界上大部分的网站都是用PHP语言开发的。PHP语言同时也是一门非常易学的语言,初学者可以很快就入门、上手。你会发现,使用PHP开发一个简单的博客系统,是极快的。但是,随着web端需求越来越复杂,你会发现,单纯的靠依赖PHP原生语法堆砌功能,项目会变得越来越臃肿,很多时候牵一发而动全身,这个时候,你就会发现,是时候去寻找一款适合这个项目的框架了。

解决项目中的哪些问题

世界上流行的PHP开源框架特别多,虽然框架的架构不同、使用的设计模式千差万别,但几乎所有的框架目的都是一样的,他们都是为了解决绝大多数项目中遇到的这些问题:
1. 如何统一控制用户访问权限
几乎目前所有流行的框架都采用单一入口文件的方式来控制用户对整个系统的访问,也就是一般项目webroot下面的index.php文件。采用单一入口文件可以方便系统权限的统一管理,同时减少逻辑控制代码的重复调用,不过,采用单一入口的方式,相应地就带来了路由规则需求,即通过路由规则来映射请求参数对应的系统模块的调用。
2. 如何控制、分离表现层和数据层
几乎绝大多数的框架都采用了MVC的分层模式对框架进行分层处理,把HTML静态标签、PHP逻辑代码以及数据对象进行分离,是网站开发系统架构的标配。由数据层(Model)提供数据给控制器层(Controller),然后控制器把数据传递给表现层(View)进行渲染,最终输出结果。
3. 如何简单、高效的开发表现层
PHP原生脚本代码文件中,PHP代码和HTML标签是混合在一起的,这种仅仅为了输出一个变量就要写上一段 对于开发者来说不仅低效,而且对于维护者来说也比较难以阅读代码的整体结构。于是就有了像smarty这种模板引擎,smarty是专为分离HTML和PHP代码而存在,像上面输出一个变量,在smarty中,只要用{$hello}即可。几乎大多数框架都有自己的一套模板引擎,同时也支持安装和使用第三方的模板引擎。有人会想到,增加模板引擎,就会额外的增加模板的解析、编译的时间,针对这个需求,模板文件缓存也就应运而生,缓存只会在模板文件有更改的情况下才重新编译,这样就节省了解析和编译的时间。
4. 如何复用增删改查数据库操作、规避SQL注入
在网站开发中,比较常用的数据库是mysql,但是也不排查有可能会用到nosql、sqlite以及oracle等。所以,在PHP框架中,我们需要提供针对不同的数据库相应地连接驱动程序。数据库操作,绝大多数就是增删改查,所以,我们完全可以抽象出来这些操作接口提供给业务逻辑层,业务逻辑不用去关心原生的sql语句如何拼接,同时也不用关心如何规避sql注入风险。在框架中,用Model层来完成这些工作。当网站流量比较大的时候,一台数据库机器可能已经无法满足需求了,这个时候就需要多台数据库服务器提供分布式数据服务,同时还需要读写数据库分离等。
5. 如何提高整体系统运行性能(加入缓存)
对于网站性能优化,这是一个非常值得大家去学习和探讨的话题。对于开发者来说,最需要关心的是项目代码运行的速度和效率,Cache 是最有效的提高系统运行性能的方法。前面我们提到的通过模板引擎生成模板缓存文件,可以大大的减少每次模板解析和编译的时间。同时,对于整个系统,框架也提供了Runtime 全局缓存文件,文件的读取操作是耗时的,特别是当一个项目比较庞大的时候,多次require和include势必会增加项目的运行时间,如果把这些文件内容全部写入一个整体的缓存文件中,那么再次运行的时候将会极大的降低了运行时间。同时,还有数据库缓存,读取数据库时间大于文件读取时间大于内存读取时间,框架提供可以把数据库中的数据库写入到磁盘文件中,或者使用squid、memcache内存缓存软件进行高效的存取。
6. 如何统一各个开发者公用部分模块行为:系统配置、请求信息、调试、日志以及表单验证
现在的软件项目基本上都是多人协作的方式进行开发,PHP项目也不例外。除了框架开发之前进行的变量定义、类声明、命名空间的约定,还需要对大家都可能会用到的基础性功能模块定义和约束。约定好框架中系统配置变量所在的文件的位置,这样就可以统一加载所有的全局定义变量,在整个系统多个模块之间都可以共享。统一处理请求信息,比如对GET请求中包含的特殊字符进行转义、对POST数据进行统一检查,预防XSS漏洞注入以及提供一些常见的通用的方法来获取用户IP地址、用户浏览器版本等信息。很多时候,对于开发者来说,最容易忽略的就是加入调试和日志功能到系统中,加入统一的调试,一方面可以节省各自重新实现一遍耗费的时间,另一方面系统上线后,可以很方便屏蔽调试信息的输出。日志功能对于一个上线的项目是非常有用的,有些隐藏的bug是很难重现的,这个时候就需要在可能出现bug的地方,加入日志信息,观察bug出现前后系统变量的值和状态。Form表单输入有效性验证,也是所有的数据提交需要用到的基础性功能,这些都是框架可以提供的公用的模块。
7. 如何实现系统的多语言切换
任何一个相对成熟的项目,都会考虑到多语言国际化。通过加入Lang层,把所有的本地化的语言字符串全部分离放到Lang层,然后通过调用变量的方式即可完成相应语言项的选择。

有哪些流行框架

目前世界上流行的PHP开源框架特别的多,每种框架都有一批使用者,很难说哪种框架优于其他的框架,基本上每种框架都有比较适合的人群和领域,建议大家根据需求来选择。
1. Zend
Zend Framework在开发者社区中很有人气,其重点是Web 2.0风格的应用程序。由于其广泛的支持和积极的用户群,Zend被称为PHP Company。Zend即使不是当今最流行的PHP框架,也绝对是之一。它强大的功能能够满足企业级的需求,当然它的使用也需要具备广泛的PHP知识。
2. Yii Framework
Yii是一个免费,开源的web 2.0 应用开发框架,使用PHP5开发,帮助开发干净,简洁的设计并且鼓励开发者开发。它帮助流水化的开发应用,并且保证高效,可扩展和易维护。性能极大的优化,非常适合开发任何类型的产品和项目。然而,它内建复杂,企业级别的应用。你拥有完整的控制,包括表现层和持久层,符合了企业级别开发的指导方针。
3. Symfony
Symfony针对的更多的是高级开发者,也即创建企业级应用的开发者,尤其是Askeet和Yahoo! Bookmarks。这个开源的PHP框架功能全面,但它的主要缺点是速度慢于其他框架。
4. CakePHP
从初学者到高级PHP开发者,CakePHP都是一个很棒的选择。它与 Ruby on Rails设计的原则基本相同,主要集中在快速开发方面使其成为一个快速应用开发的优良框架。其迅速增长的支持系统、简单和可扩展性使CakePHP成为当今最热门的PHP框架。
5. CodeIgniter
CodeIgniter以其易用性、性能和速度而闻名。不同于Symfony,CodeIgniter主要针对的是与人共享主机的开发者,或者为小型设备寻找PHP框架的开发者。它提供简单的解决办法,而且有一个扩展库包括视频教程、论坛、用户指南和wiki。初学者应该考虑使用CodeIgniter。
6. ThinkPHP
ThinkPHP是一款国人自主研发的PHP框架,文档比较齐全,适合初学者学习使用。

总结

面对形形色色的PHP框架,在选择框架使用的时候,很多人纠结症就会犯了,到底该选用哪种框架?根据我本人经验来看,首先,应该是对项目需求进行深入的分析,看看该项目需要解决哪些问题,项目的复杂度怎样,然后尽可能的考虑到项目未来的走向,比如:如果是电商平台的,未来随着项目上线,会员会越来越多,订单量有可能会急剧增加等,针对这种未来可能会有爆炸式增长可能的需求,就要选用企业级的框架,性能要稳定,安全性要非常高。再比如,如果纯粹是开发一个公司内部人员使用的OA系统,未来公司人员增长和系统访问量都在可预估的量之下,基本上选用CI框架就足够了。
不过,框架也不是万能的,如果在没有熟悉PHP基础语法,对框架一知半解的情况下,贸然使用框架,对于项目来说是可能灾难性的。选对框架非常重要,选择之后,继续学习更重要。

你可能感兴趣的:(框架,PHP)