热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PHP的框架通常用于小型项目吗?SegmentFault

像大型项目怎么办呢?不用框架。都自己手写膜?还是不用PHP。用其他语言做?
像大型项目怎么办呢?不用框架。都自己手写膜?
还是不用PHP。用其他语言做?

回复内容:

像大型项目怎么办呢?不用框架。都自己手写膜?
还是不用PHP。用其他语言做?

犹豫了一下还是来回答一下这个问题,这是我面试的时候经常问的问题,因为每个框架和每个项目都是不一样的,选择框架是一件非常看经验和思考判断能力的东西。

项目大小只是决策的一个根据而已,甚至还是不怎么重要的一个根据。下面聊聊我认为选择框架时需要注意的地方

团队成员情况 & 未来团队成员情况 & 所在地职业市场情况

首先,如果团队现在和未来都只有你一个人(比如自己的toy project),那选自己最想用的就好。但只要不是这个情况,你最好先得了解市面上常见的各种框架,然后忘记自己的个人偏好。

了解你的团队成员的现在情况,考虑你的团队未来的发展速度,未来可能加入的团队成员的情况,以及你所在地职业市场情况。打比方说,Laravel或许是个不错的选择,但如果你在二三线城市,团队又必须高速发展大量招人,选择Laravel可能很快会让你陷进“composer和现代PHP技能培训班”的窘境,布教是一项伟大的事业,但不是你的职业

项目生命周期 & 未来演变方向

这就是我觉得远远比项目大小要重要的因素之一。有的项目,作为贵司的主营业务是需要长期维护,持续迭代的。而另一些项目可能作为一些边角、过渡的项目,可能做完以后不会再有什么后续的需求。最后还有一些外包/类外包的项目,交付以后就没有需求/后续需求可以当另一个项目。

再大的项目,需求再多,如果是第三种,无需考虑未来演变的,那么框架的扩展性就能够被牺牲(从而换取开发速度或其他好处),打比方说wordpress改改之类的选择就可以被考虑。再小的项目,如果是贵司的主营业务,持续迭代的,那么就算工作量再小,也必须慎重考虑框架的扩展性。

那么,什么是框架的扩展性呢? CI是扩展性很好的框架吗?ZendFramework1/2是扩展性很好的框架吗?

答案是,看未来演变方向。有的项目未来的压力在访问流量大,有的压力在数据量大检索频繁,也有项目压力在需求迭代快,变动频繁而周期短。项目面临的问题越是普遍,那么预设各种解决方案的框架可能越能减少重复造轮子,反之项目面临的问题越是极端,那么轻量化的那些框架可能更适合让你的团队自己研究解决方案嫁接到框架中。另外,项目维护的时间越长,变动越难预测,采用预设各种解决方案的框架的风险就会越大(那些预设的解决方案恰好能解决你的每个问题的概率越来越小)

框架本身的基本素质

性能和跑分。除了phalcon和Yaf两个C实现的框架,其他框架请认为一样快。另外除非你在主持类似新浪微博更换PHP框架这样的事,或者说除非你管理的项目web机器超过100台,请忽略PHP框架的性能因素

psr和composer亲和性。这是双刃剑,前面已经聊过怎么看待这个特质了。

安全性。某些框架甚至本身自己有安全漏洞不多说。另外如果框架层面提供了一些安全方面的东西,建议还是要简单看一遍代码,有时那可能反而不如自己写。

功能性。也就是预设的解决方案的数量和质量,前面有提过。

模块化程度。框架内的各个部分是否能够自定义,自定义的代价多高。

业务代码量(?)很难找到对应的词,总之有第三个特性和前面两个(功能性&模块化程度)一起,无法达到三者兼得。功能特别多,模块化程度又高可以随意定制、替换的框架,往往普通的业务代码也要写一堆。 一句话能写出一大堆功能的框架,往往模块化程度不理想,不容易自定义。 模块化程度高,而业务代码不啰嗦的框架,则往往没有丰富的预设功能。

周边生态和活跃程度以及兼容性。活跃的框架就还有成长和改进的空间,但相应过于活跃有时会导致应用无法兼容。另一个指标是周边的生态,有没有其他人基于这个框架开发一些周边的模块/插件之类的东西。


最后,如果一定要用“大”“小”这样粗暴的词语来描述框架和项目的话,我的建议是大项目用小框架,小项目用大框架。如果你看懂了我前面的说法,那应该能理解为什么我会这么说。

小型项目用一些流行的框架什么的。
大型项目,都会自己写框架的。而自己写的也会参考一些成熟的框架,去掉一些不用的功能或着优化。
而你要是学习的话建议先看看thinkphp 之后看看laravel 最后看看Phalcon 。

小论坛PunBB和大论坛Discuz!都是没有采用框架的PHP程序,可见,框架不是项目必需的东西.
PHP本身就是一个Web框架,自己分离界面和逻辑,实现MVC即可,比如:
前台:

/post.php?id=1024                        //页面控制器(处理输入,调用模型,整合数据,输出视图)
    /include/common.php                  //执行一些公共操作,加载公共库(承上启下).
        /config.php                      //全局配置
        /include/functions.php           //系统函数(模型,SQL增删改查,预处理参数化查询防止SQL注入)
        /themes/default/functions.php    //主题自定义函数
    /include/database.php                //按需连接数据库
    /themes/default/post.php             //视图(htmlspecialchars/HTMLPurifier防止XSS)
        /themes/default/header.php       //公共头部(common.js)
        /themes/default/footer.php       //公共尾部

后台:

/admin/post.php                                //页面控制器(处理输入,调用模型,整合数据,输出视图)
    /include/common_admin.php                  //执行一些公共操作,加载公共库(承上启下).
        /config.php                            //全局配置
        /include/functions.php                 //系统函数(模型,SQL增删改查,预处理参数化查询防止SQL注入)
        /admin/themes/default/functions.php    //后台主题自定义函数
    /include/database.php                      //按需连接数据库
    /admin/themes/default/post.php             //视图(htmlspecialchars/HTMLPurifier防止XSS)
        /admin/themes/default/header.php       //公共头部(common.js)
        /admin/themes/default/footer.php       //公共尾部

越大的项目,越需要框架来统一思想和规范,不然开发人员一多,各搞各的,还怎么玩?只是框架本身选择自己开发,还是选择用现有来源框架的问题。

中型大型完全没有压力,可超大型就不太合适了。应该来说适合中型中大型应用开发

不知道在你眼里百度贴吧算不算大项目,在没有迁到hhvm前一直是用的php,

不是要用,是必然要用。但是大公司的框架不一定是外面熟知的那些框架。比如百度,是根据Yaf扩展的、

这个要看情况,PHP确实比较适合中小型项目,因为PHP开发周期短,效率比较高。但是大型的公司也会采

用PHP,比如新浪微博,他有能力改进PHP,有人有那个实力去写PHP高可用扩展,能把PHP的性能发挥到极

致,然后借助于Nosql,可以把高并发完全凌驾于mysql之上。现在微博的Redis集群是非常大的,有好多

操作根本进不到数据库操作那一层,在Re/mc中就解决了,所以PHP用于什么样的项目还是要看团队,看驾

驭PHP的能力。

大型项目一样有用php的呀,你看一个框架敢叫企业级开发框架,那一般就可以开发大型项目,当然这个大型还得看你项目具体有多大

小、中、大型的项目都可以采用框架!有条件的话,建议尽量使用框架。

既然别人已经写好了那么多框架,那么就不要再去重复造轮子了,而是学习怎么使用它。

去学习一些重量级的框架,像Symfony、Yii、Phalcon、Laravel等等,
这些框架在很多大项目中都有使用。当然如果你以后参与到中、大项目中,也很可能会接触到他们,
你现在学习并使用他们,是为你以后打下铺垫!

一个重量级的框架,牵涉到的东西很多,也有助于深入学习PHP。

https://github.com/lloydzhou/router

项目何为大何为小,一般所谓的大项目都被分解为若干小项目,这些“小项目”又会有各自的语言和框架的实现,

无论大小项目,基本性能瓶颈都不在php,除非你故意写的很烂,即便如此php也是极快的。
瓶颈多在数据库。

推荐阅读
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 本文介绍了求解gcdexgcd斐蜀定理的迭代法和递归法,并解释了exgcd的概念和应用。exgcd是指对于不完全为0的非负整数a和b,gcd(a,b)表示a和b的最大公约数,必然存在整数对x和y,使得gcd(a,b)=ax+by。此外,本文还给出了相应的代码示例。 ... [详细]
  • EPICS Archiver Appliance存储waveform记录的尝试及资源需求分析
    本文介绍了EPICS Archiver Appliance存储waveform记录的尝试过程,并分析了其所需的资源容量。通过解决错误提示和调整内存大小,成功存储了波形数据。然后,讨论了储存环逐束团信号的意义,以及通过记录多圈的束团信号进行参数分析的可能性。波形数据的存储需求巨大,每天需要近250G,一年需要90T。然而,储存环逐束团信号具有重要意义,可以揭示出每个束团的纵向振荡频率和模式。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • Java实战之电影在线观看系统的实现
    本文介绍了Java实战之电影在线观看系统的实现过程。首先对项目进行了简述,然后展示了系统的效果图。接着介绍了系统的核心代码,包括后台用户管理控制器、电影管理控制器和前台电影控制器。最后对项目的环境配置和使用的技术进行了说明,包括JSP、Spring、SpringMVC、MyBatis、html、css、JavaScript、JQuery、Ajax、layui和maven等。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 禁止程序接收鼠标事件的工具_VNC Viewer for Mac(远程桌面工具)免费版
    VNCViewerforMac是一款运行在Mac平台上的远程桌面工具,vncviewermac版可以帮助您使用Mac的键盘和鼠标来控制远程计算机,操作简 ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • 本文详细介绍了MySQL表分区的创建、增加和删除方法,包括查看分区数据量和全库数据量的方法。欢迎大家阅读并给予点评。 ... [详细]
  • r2dbc配置多数据源
    R2dbc配置多数据源问题根据官网配置r2dbc连接mysql多数据源所遇到的问题pom配置可以参考官网,不过我这样配置会报错我并没有这样配置将以下内容添加到pom.xml文件d ... [详细]
  • 在springmvc框架中,前台ajax调用方法,对图片批量下载,如何弹出提示保存位置选框?Controller方法 ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
author-avatar
一支妙笔生花来
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有