我说的项目开发方案并不是谈论到底用不用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. Backbone之温故而知新1-MVC

    在忙碌了一段时间之后,又有了空余时间来学习新的东西,自从上次研究了backbone之后,一直不得入门,今天有时间有温故了一次,有了些许进步在此记录下, 在开始之前,不得不提一下我的朋友给了我“豆瓣音乐 ...

  2. CSS之APP开发比较实用的CSS属性

    简介:本人刚入前端没多久,在做APP的开发的时候,经常遇到一些奇怪的问题,本人经验少,会使用js来解决css上的问题,但,却不知道其实有些css已经帮我们解决了. 1,white-space: now ...

  3. mybatis学习之入门实例

    测试版本 mybatis:3.2.8 数据库:mysql 项目结构 jar包准备 mybatis-3.2.8.jar mysql-connector-java-5.1.39-bin.jar junit ...

  4. Visual Studio Code 的使用

    常用快捷键 常用General 按 Press 功能 Function Ctrl + Shift + P,F1 显示命令面板 Show Command Palette Ctrl + P 快速打开 Qu ...

  5. Spring学习笔记:Spring整合Mybatis(mybatis-spring.jar)(一:知识点回顾)

    一.知识点回顾 1.Mybatis环境搭建(DAO层的实现)(使用maven项目管理工具) 需要引入的依赖包: <!-- 单元测试junit --> <dependency> ...

  6. How WindowLeaked exception occured?

    If a Activity performDestroy, and there is window not closed whose window token is the Activity's mW ...

  7. Spring课程 Spring入门篇 5-4 advice应用(上)

    1 解析 1.1 通知执行顺序 2 代码演练 1 解析 1.1 通知执行顺序 aop执行方式为:前置通知==>所要增强的方法==>后置通知==>最终通知 在出现异常时会进行:前置通知 ...

  8. jQuery框架学习第十一天:实战jQuery表单验证及jQuery自动完成提示插件

    jQuery框架学习第一天:开始认识jQueryjQuery框架学习第二天:jQuery中万能的选择器jQuery框架学习第三天:如何管理jQuery包装集 jQuery框架学习第四天:使用jQuer ...

  9. canvas画布基础知识

    <canvas> </canvas>标签用于绘制图像(通过脚本,通常是 JavaScript). <canvas> 元素本身并没有绘制能力(它仅仅是图形的容器) - ...

  10. 在URL里传入数组到HTML 里。

    需求 静态页面根据URL输入,动态显示图表满足如下两个条件. 1. 隐藏指定的行 2. 设定初始显示的Check box 需要的部分被打勾 实现 1. 创建一个静态的页面, <table id= ...