我说的项目开发方案并不是谈论到底用不用PHP去开发的问题,而是当你遇到一个项目,已经决定了用PHP,然后才来看的问题:用PHP的什么开发方案。

基本上有这么几种方案。各有各的说法,良莠不齐,我就谈谈我对它们利弊的认识,选择的时候也多个参考。

方案1:基于开源系统

常用的开源系统有:Discuz,PHPWind,PHPMyWind,PHPCMS,DedeCMS,Ecshop系列等。

这种方式是最偷懒的,也是初学者的首选。因为一个初学者或者不学技术的人也能在分分钟之内依葫芦画瓢的搭建出一个系统。

但有技术和没有技术的区别在于后续能不能按需去修改,去扩展功能,去写插件,去深度二次开发......

很多人总认为这种方案是最容易的,但随着项目的不断出现的新需求,这样的方式就暴露出了很大的局限在后面。比如你用Discuz做了一个论坛,当你想添加一个系统中并没有事先开发的功能时就麻烦了,你很有可能需要开发插件,或者深度二次开发。

这就不是初学水平能胜任的,而是要高级水平才能自由的修改它,否则会遇到很多莫名其妙的情况。因为它就不只是需要添加新模板,甚至需要添加控制器和数据库的底层操作,需要伤筋动骨了。通常麻烦会大到你想撞墙以至于不想干的地步,如果你基础不够,此时你一定会陷入困扰之中。

所以,网上有很多这种方案开发的项目,后续的升级都变得很是困扰,甚至多年都不敢升级。

但不能因此就说这些系统没有意义,至少它给你“入门”了。否则一个新手就连搭建个系统都成问题,也会大大的影响学习的积极性和自信心。

方案2:基于某框架

这需要一定的PHP功底了。这种层次需要你自己开发控制器,Model,View层,需要自己设计数据库,需要懂面向对象编程思想。所以说需要一定的基础。

框架有:TP框架,Laravel框架,YII框架,CI框架等等。也是各有各的特点。没有最好的,只有更好的。

不要迷信某种框架!

如果你能使用这种方式来开发出项目,说明你有PHP基础,甚至有点水平了。同时比如控制器是你自己开发的,你就可以很方便的去修改某个功能和添加某个功能。

比如给用户添加一个留言的模块,一个微信支付的模块,一个在线视频的模块,就变得很容易。

这种方式的缺陷就是:一开始开发出一个系统就比较麻烦。基础不到位,你可能寸步难行,开发好久,系统都不能正常运营起来。

同时如果某个框架底层实现有问题或者太啰嗦,你不好修改。只有等到作者下一次的升级,或者你更换其他的框架。

所以选择这种方案需要一定的冒险,需要有实力去支撑。

方案3:直接开发项目,但都是用基础知识。

比如全是用PHP的函数去堆叠,一通的include,也没有模板解析引擎,也不做单入口,也没采用MVC,也不使用面向对象。

这种项目虽然最后开发出来了(而且很有可能开发的出来,因为就是搭积木的方式堆出来的),但维护起来麻烦,同时也没移植性可言。

每次开发一个新的项目都一样的工作量,每次也都像脱一层皮。

速度和效率都慢,不值得提倡。

方案4:直接开发项目,同时使用了更高级的知识如MVC的措施,面向对象思想。

这种方式虽然开发出的项目,同时维护起来比上述基础开发要容易。但是同样没有移植性可言。也不值得提倡。

方案5:自定义框架,在自定义框架上开发具体项目。

自己先用面向对象、MVC、单入口等开发个自定义的框架,然后在自己的框架之上开发具体项目。

这样的方式很好,好的地方就是你的底层可以自由的修改,不用等别人来升级什么的。

但是难度比较大。不适合一般的新手。

方案6:自定义框架,在自定义框架上开发通用系统,在通用系统上开发项目。

这样的方式很好,好的地方就是不但你的底层可以自由的修改,同时你的通用项目功能也可以随时升级。

但是难度是最大的,要求你对整个PHP体系有深刻的了解,同时开发过很多的项目,懂得要怎么才能优化系统,才能开发出实用的自定义框架和自适应通用系统。

这种方式不但具有方便的维护性,同时具有很好的可移植性。同时你可以根据需要随时升级底层和通用系统层,让它为你的所有项目做最好的服务。

值得提倡,但你如果不先脱几层皮,你是做不到的这种方案的。

开发的项目注意事项:

1:项目升级不要随意跟风,也不要动不动就升级,除非有硬性需求;

一些基础不够的人,自然没有全面的认识。看到有新的语法了,就想马上去用。总感觉既然有新的了,那就要用新的,这才合理,而不顾他自己的项目的情况,升级麻烦与否,技术力量跟得上与否,开发时间大概要多少。建议这些人自己去做一下再说。

因为很多技术负责人是那种只会说而不会写的技术部管家...盲目的瞎指挥会让你的技术团队饱受摧残,很多的时候都费力不讨好。

2:不要乱更换开发方案,除非你能把控的了;

比如:今天用Discuz开发了,但是发现一个能开发不了了,明天就换用PHPCMS,遇到了问题又更换为TP开发,再更换为Laravel去开发。

至于为什么要更换那种新的开发方案,也说不出个所以然,只是看网上别人说好就去改......古代剑道高手,基本上都是手中无剑,哪怕用的是一根棍子也能打败那种手持宝岛的不学无术之徒。所以,自己用的好,才是真的好。更换一个新的方案,除非你能把控的了。

3:在开发之前,选择好开发方案尤为重要。否则很可能走不下去,或者从头再来。浪费在不停的选择上......

如何选择PHP项目的开发方案?的更多相关文章

  1. 【多端应用开发系列0.0.0——之总序】xy多端应用开发方案定制

    [目录] 0.0.0 [多端应用开发系列之总序]服务器Json数据处理——Json数据概述 0.0.0 [因] 正在学习多客户端应用开发,挖个坑,把所用到的技术方案,用最简单直白的语言描述出来,写成一 ...

  2. 基于Cmake+QT+VS的C++项目构建开发编译简明教程

    目录 一.工具下载与安装 1.     Qt 2.     Visual Studio 2015 3.     Cmake 二.C++及Qt项目构建 1.     基于VS构建Qt项目 2.     ...

  3. 熟悉使用Github,VS进行项目的开发(第二次作业)

    git地址 https://github.com/Jason98w git用户名 Jason98w 学号后5位 72323 博客地址 https://www.cnblogs.com/jason5689 ...

  4. Git项目协同开发学习笔记2:项目库开发协作相关命令

    之前介绍了如何用git构建项目库及其后续操作的问题,但主要还是个人的操作问题,不太涉及到项目协作方面的问题,所以来说下这块.传送门在这里(后面的可以不用看了). 1.同步 首先就式同步问题:在项目协作 ...

  5. Unit05: WEB项目的开发模式 、转发 和 Unit09: EL、JSTL

    Unit05: WEB项目的开发模式 .转发   和  Unit09: EL.JSTL dao package dao; import java.io.Serializable; import jav ...

  6. maven(多个模块)项目 部署 开发环境 问题处理历程【异常Name jdbc is not bound in this Context 异常java.lang.NoSuchMethodE】

    maven(多个模块)项目 部署 开发环境 问题处理历程[异常Name jdbc is not bound in this Context 异常java.lang.NoSuchMethodE] 201 ...

  7. vue项目的开发

    vue项目的开发 我们已经通过命令行创建了一个vue项目,并且打开了这个项目.下面是这个文件的src文件夹,这个文件夹放了整个项目的核心代码. 一.vue文件的用处简介. 1.assets文件夹,用来 ...

  8. 使用requirejs+vue 打造 无需编译发布便捷修改调整的模块开发方案 (一)

    前言 不知道大家有没有这种感觉,现在流行的很多前端技术,基本上都基于webpack编译,当然不是说这种方案不好,在标准的开发流程运行中,这种方式其实也挺不错,管理方便,代码统一. 痛点:项目不是单独针 ...

  9. 基于maven的javaweb项目模块化开发

    转自:https://my.oschina.net/kingfire/blog/273381 基于maven的javaweb项目模块化开发 引言 考虑团队拥有多个类似项目的情况,比如一些功能差异不大的 ...

随机推荐

  1. 第三章 使用java实现面向对象 多态

    第三章 多态 一.编写父子类 1.多态是具有表现多种型生态的能力的特征,同一个实现接口,使用不同的实例而执行不同的操作 2.一个引用类型,使用不同的实例而执行不同操作.(父类引用子类对象) 使用多态的 ...

  2. nodejs常用npm包

    express常用npm包整理如下 art-template 一款js模板引擎,性能不错 jayson     一款纯node的rpc应用包,可实现rpc服务.tcp.http等服务 multer   ...

  3. 七、集成swagger2

    1.添加依赖 <!-- swager2 --> <dependency> <groupId>io.springfox</groupId> <art ...

  4. MongoDB 学习(一)安装配置和简单应用

    一.安装和部署 1.服务端安装 1.官网下载(官方网站 https://www.mongodb.org/downloads/#production),傻瓜式安装,注意修改安装路径. 安装完成后的目录结 ...

  5. 二分查找——Python实现

    一.排序思想 二分(折半)查找思想请参见:https://www.cnblogs.com/luomeng/p/10585291.html 二.python实现 def binarySearchDemo ...

  6. 来看看javaweb的自定义标签

    1.为什么需要自定义标签? jsp的简单标签其实就是jsp的自定义标签,主要作用就是移除jsp页面中的java代码,使得jsp页面只有标签和EL表达式,而没有java代码.利用自定义标签,可以使软件开 ...

  7. Swiper结合jQuery实现腾讯新闻首页

    今天我们来说一下,Swiper结合jQuery实现的腾讯新闻首页, 咱们先来看一下效果图: 这也是我把PC端缩成移动端来截的图,毕竟是PC端,要是不好看的话请见谅,,,,,,,,,,,,, 然后请允许 ...

  8. 我的视频网站开通,第一个 ArcGIS文本文件,excel文件生成点操作发布,希望大家支持

    网站地址:http://i.youku.com/gisoracle第一个学习视屏:ArcGIS文本文件,excel文件生成点操作http://v.youku.com/v_show/id_XNzM3Nz ...

  9. Codeforces Round #413 B. T-shirt buying

    B. T-shirt buying time limit per test   3 seconds memory limit per test   256 megabytes   A new pack ...

  10. 30_AQS

    [参考文章] https://www.jianshu.com/p/df0d7d6571de http://ifeve.com/introduce-abstractqueuedsynchronizer/ ...