想问一些 router 、MVC、CLASS .....等问题

之前有发问过类似的问题,不过没有讲得很清楚我的开发方式。而现在想继续问一些最近看到的疑问,容我先介绍一下我目前的开发环境和一些作法,想请有经验的大大们帮我改善我的程式~
本身目前使用的是 mysqli(mariadb) + php7 + jquery3 方式开发,但对于 router 、MVC架构、CLASS NAMESPACE、autoload,CURL 的运作仍然是不太了解,不知道哪个才是正确的做法?从上次的提问到现在已经看了不少YOUTUBE其他高手的实作,发现每个人的做法都不太相同,而导致我不太知道哪种作法才是对的、适合我的。
虽然尝试了不少新的写法,例如OOP mysqli connection,但对于新的观念仍然想不到该怎么替换掉自己脑中的做法,因为我知道再写下去可能会很难维护,也不好让其他人协作。
我先详细说明一下我的开发方式,请有经验的大大教我如何顺利地改变作法

目前一个网页就是一个PHP档案,每一个档案上跟下都会引入一个PHP档案(header.php, footer.php),footer.php主要是放置JS引入,或是根据档案名称的不同引入需要的js,以及各种简单或复杂的jquery语法档案。
header.php 引入的文件就极为复杂,有一个文件夹里面放了许多sql语句,会进行分类,每个php里都会有个switch,根据哪个档案路径去引入哪些sql语句,里面也包含一个文件是许多function ,虽然有大概的规划在对的文件中引入该function,但实际上还是跟class + namespace差的甚远。 (html标头也会在这个档案中引入)
有个文件是 env.php,会根据host去显示正确的环境变数
sql connect.php 目前是每个网页都会引入,虽然每个网页都会需要连接资料库,但这做法似乎不是很对,自从了解OOP后。
有个文件是与后端资料库互动的,叫做 update.php,里面也是利用 switch + type 来根据 我给的 GET/type 去找到对的行为。就是前端 ajax 带一个 type 去update.php里面找对的请求,根据 type的不同做不同的事情。而 update.php里面中也会引入 sql connect.php、必要的 function和env.php。
有个 css.php是引入所有需要的 css档案,有必要的话也会根据档案的不同引入不同的css。
我参考了github上大神的写法,例如https://github.com/bramus/routerhttps://github.com/phalcon/mvchttps://github.com/php-curl-c... curl-class 、 https://github.com/ThingEngin... ... 简直是新世界,但苦于现在的写法跟他们天差地远....

所以我想问问我这样的摆放方式,能够怎么改善,甚至可以将其MVC、CLASS化?我目标是希望能够让人看得懂我的程式码,一起协作。我相信这不容易...但我相信脸书推出一开始的写法也不是这样顺利。有太多需要改的地方,但我不知道从何开始下手,先从最容易变动的开始....想请有经验的大大指点迷津,真的非常感谢! 我会时不时补充的!
欢迎大大加l i n e 好友(在我的个人档案)。有发问问题会优先丢网址给你
已经准备好改善我的程式码了~

疑问补充:

  1. namespace + class 的引入跟一堆 function 写在同个php 然后一次引入,这两者会有哪些差别?假设你有很多 function ,有些是后端需要,有些是前端显示需要,你会怎么摆?
  2. 每个页面都引入 sql connect,跟 OOP connect作法有什么差别?
  3. js 的管理?假设同一个js档案中有很多 click, mouse 事件,你会写在同一个js档案吗?
  4. 我在同一个js档案中会放置多个 ajax function,也是利用 type 来决定要去找哪个 ajax ,如果是你你会怎么做?
  5. css,js 你会在一开始就将css,js 全部引入吗?或是能用什么方式有效分开?使该出现的时候再出现,我是用 switch 作法,你会怎么做?
  6. 我的 update.php 作法是好的吗?如果是你会怎么做?
  7. 在一个 php 的文件中,基本会有两个档案引入,header.php, footer.php,这是可以的做法吗?
阅读 4.4k
4 个回答

看了一下你说的技术...感觉已经过时很久了...
1.先说第一个问题,这个就是惰性加载autoload的问题,只有在用到这个类的时候才加载,否则不加,这个是可以去掉多余不用的加载,同时也让代码少了一堆引入,会好看很多
2.sql的问题是最大,其实应该是用到了才连接sql,不用就不连接,这点请参考MVC模式(当然,这个MVC也过时了)
3.js肯定是一个页面一个js,然后有个公共方法的public.js或者common.js
4.其实这个问题就是MVC模式能够解决的问题
5.同上,参考MVC模式
6.没见过这种骚操作,都是用router去决定访问哪个文件中什么function
7.不太可用,就是一个autoload的问题,早就有解决方案了,composer了解一下

我觉得目前你需要做的,还是找一套PHP的MVC框架(比如Yii或者Laravel),把你的项目用这套框架重构一下,记得不要用你之前的代码了;等你熟悉了MVC的运行模式以后,上边的某些问题才会有答案。

就好像《灌篮高手》里,樱木花道进队之后,先得跪那老老实实拍皮球练手感。

另外看书这块,之前我看有人推荐了《Modern PHP》?你目前这个状态,我觉得去看框架实战类的书更合适,否则新名词攒的越多你越焦虑,因为你不知道怎么用,倒不如踏踏实实写套MVC的网站出来,这样更有成就感。另外在写的时候你应该会接触到ORM、中间件、路由之类的东西,等把用法大概弄明白了,就可以开始看《企业应用架构模式》了(英文原名:Patterns of Enterprise Application Architecture),里边是讲为什么会有M、V、C这三层以及架构模式的,做过实操之后,这些东西读起来就会很有感觉了。模式的意义在于,它是某些特定问题的优化实践。至于什么autoload、OOP之类的东西,大部分现代语言都会有的,不用太纠结那些语言特性。

一家之言,仅供参考。

其实前面的已经回答清楚了,今天看到有邀请,我补充一下。我以前的开发方式也是和你的一样,像高票回答说的那样,其实已经过期了。

你的疑问的产生原因大都是概念上的,单个文件(档案)为一个请求影响了你的思维方式。

很好解决,学习 Modern PHP 这本书,里面介绍了像 Composer 等的现代 PHP 知识,或者学习一种框架,基础好的可以直接学 Laravel,如果一时间不理解,可以看视频讲解或者从最简单的 MVC 框架 codeigniter 开始。

不管架构如何,现代框架都是 单入口,然后根据请求进行路由分发,再到请求处理,可能是简单的控制器层,也可能再嵌套一层服务层,最后处理完毕响应返回给客户端。中间可能有生命周期钩子,或者中间件做中间态处理。

前端部分建议抛弃后端模板渲染,学习 react 或 vue 吧。还有就是,如果不是特别喜欢 PHP,大可以转向 Node.js

感觉你是在搭框架。。。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题