PHP的框架是不是所有语言当中最多的?

福嘞娃 发布于 2016/06/23 18:12
阅读 1K+
收藏 0
PHP
又多又乱,每个公司都不一样,我说的是那种专业框架,不是那种公司自己封装或者个人封装的,真的是太乱了,换家公司等于零经验,而且框架本身更新版本动不动就重构,跟另外一个框架一样,市面上说得上来的专业框架至少有上百个吧
加载中
1
bastetwang
bastetwang
eechen会告诉你php的框架不光是最多的,还是最好的。因为其他语言他也不熟悉...
0
tinshen
tinshen
java才是最多的少年...
福嘞娃
福嘞娃
并没有PHP多
0
数学家
数学家
上百种太夸张了,常用的最多十种
0
搜盘君

你上github看看,不就一目了然了

0
风筝上的少年
风筝上的少年

其实做PHP很累的,框架那么多,代码还乱,每个人的编码风格都很随意。。

0
eechen
eechen

引用来自“bastetwang”的评论

eechen会告诉你php的框架不光是最多的,还是最好的。因为其他语言他也不熟悉...
我不喜欢现有的封装过于复杂的框架,其实PHP自己就是一个Web框架,自己实现MVC分离界面和逻辑就好了.
我也不喜欢前端控制器,我推荐页面控制器,这样耦合会小得多.
PHP本身就是一个Web框架,看看PHP设计的那些超全局变量就知道了.
合理规划前缀,全部函数都写到functions.php里统一管理,控制器和视图里都可以调用.
把模型分离到/include/functions.php,
把视图分离到/content/themes/default/post.php,
把公共操作统一到/include/common.php,比如用于加载functions.php和验证cookies.
页面控制器/post.php执行common.php,用超全局变量获取参数,调用业务(调用函数,返回数组),渲染视图(输出数组到HTML).
一气呵成,一目了然,大道至简,实用至上.
安全方面,用预处理绑定参数查询防御SQL注入,用htmlspecialchars/HTMLPurifier过滤输出防御XSS注入.
0
eechen
eechen
为什么说PHP框架里的前端控制器和路由是多余的

随着前端控制器使用的泛滥,越来越多人开始质疑PHP框架是否有必要使用前端控制器.
这里以PHP之父Rasmus Lerdorf的影响最大,他在Simple is Hard里陈述了如果想开发出有扩展性的Web应用,
必须保证架构是Share-nothing Architecture:
http://talks.php.net/show/ntu/
* Like HTTP, each request is distinct (像HTTP一样,每个请求都是独立的)
* Shared data is pushed down to the data-store layer (共享的数据应该放到存储层)
* Avoid Front Controller (不要使用前端控制器)
在Rasmus Lerdorf看来,想要让一个网站具有良好的扩展性其实是非常简单的,
只需将网站应用分成若干个独立小程序,前端透过API提供服务,后端是应用程序引擎,这样做自然会有扩展性.
因为应用的每一个部分,都有不同等级的使用方式,需要有不同的扩充程度,需要不同的机制来处理.
以开发雅虎电子邮件而言,是要开发一个地址服务程序,一个读信服务,一个送信服务,而送信程序完全和读信程序无关.
以雅虎的规模而言,需要让这些工作完全分离,才有扩充性.
这里的关键是你必须建立分离,模块化的独立端点,而不是全部放在同一个大篮子里.
大多数现今开发的框架,都使用了前端控制器,每一次浏览器发出请求时,
就会调用这个前端控制器,再由前端控制器来分辨,使用者想要执行哪一支程序.这样做,一点意义都没有.
在浏览器层面,程序完全能知道用户想要做什么事情,例如使用者只是要读信,程序就不用再把需求送到服务器,让服务器判断使用者要读信还是送信.
将这类决策工作拉出浏览器,由服务器处理,就会浪费大量服务器资源,来处理那些对用户没有实际作用的工作.
总结:
首先,前端控制器里存在一个路由转发的过程,这个过程是在服务端完成的,
不管是什么请求都要经由前端控制再完成路由转发,这个过程很可能会引起性能问题.
如果抛弃了前端控制器的做法,转而使用页面控制器的实现方式,那么服务端就不必再存在路由转发的过程,
因为在把页面渲染到浏览器上的时候,自然而然就完成了路由的设定,不同的动作对应着不同的URL.
功能实现则完全由页面控制器来实现.如果某个动作引起了性能的瓶颈,那么我们只要针对这个动作对应的URL增加更多的服务器就可以完成扩展.
另外,传统的MVC理论里,强调代码逻辑上的分离,但并未就物理分离做出描述,Rasmus Lerdorf在这方面做出了有益的补充.
按Rasmus Lerdorf的引申想法,M和V是分别位于不同服务器的,V通过WebService调用M上的数据.
请牢记Rasmus Lerdorf的教诲.

框架的前端控制器,不仅增加了Nginx服务器的重写负担,也增加了PHP处理的负担.
可以用独立的可通过URL直接访问的页面控制器(Page Controller)代替前端控制器(Front Controller)的路由功能.
可以用common.php代替前端控制器执行一些公共操作,加载公共库.
可以用超全局变量代替框架URL分析获取GET/POST参数.
可以用PHP自带的模板引擎取代第三方模板引擎(Smarty,Twig).
别忘了,PHP本身就被设计成一个Web工具箱,框架不应该再重新造同样性质的轮子.

前端控制器(Front Controller) 页面控制器(Page Controller) MVC(模型-视图-控制器)
https://msdn.microsoft.com/zh-cn/library/ms978723.aspx
Front Controller 比 Page Controller 更复杂,实现此解决方案会增加维护成本和新手的学习难度。
Front Controller 是用来处理 Web 应用程序的所有请求的单个控制器。
如果处理程序必须执行数据库查询或 XML 文档查询才能作出路由决定,则可能导致性能非常缓慢。
Page Controller 模式是 Front Controller 的更简单的替代方案。
在 Page Controller 模式中,每个页面各有一个控制器对象,这与所有请求使用一个对象的 Front Controller 方案相反。
对于大多数应用程序来说,Page Controller 是更合适的起点。仅当需要 Front Controller 时才应该使用它。
Leoops
Leoops
大神就是大神,一套一套的
乌龟壳
乌龟壳
没明白两者区别是怎样,HTTP到PHP只有一条路,始终有一个核心的“路由”
0
大止刀口
大止刀口

因为PHP专注做web开发,而且使用人数也多,你就会看到很多web框架。

其他语言基本上什么都做,虽然使用人数也多,但是你会发现用途迥异。

如果你把其他语言的不同发展方向的东西都去了解下的话,你会发现,不比PHP少。

0
it1000001001
it1000001001

上百个谈不上,我感觉行业里主流的常用的就几个,像YII,laravel ,TP……,一只手都能数过来。。

像我们团队,就是用的自己开发的框架--zentaoPHP,简单易用,扩展性强。

LZ多学习吧,尤其像PHPWEB开发这行,要学习的东西更多,绝不止于几个框架哦。。现在竞争这么激烈。

返回顶部
顶部