之前有发问过类似的问题,不过没有讲得很清楚我的开发方式。而现在想继续问一些最近看到的疑问,容我先介绍一下我目前的开发环境和一些作法,想请有经验的大大们帮我改善我的程式~
本身目前使用的是 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/router 、 https://github.com/phalcon/mvc 、 https://github.com/php-curl-c... curl-class 、 https://github.com/ThingEngin... ... 简直是新世界,但苦于现在的写法跟他们天差地远....
所以我想问问我这样的摆放方式,能够怎么改善,甚至可以将其MVC、CLASS化?我目标是希望能够让人看得懂我的程式码,一起协作。我相信这不容易...但我相信脸书推出一开始的写法也不是这样顺利。有太多需要改的地方,但我不知道从何开始下手,先从最容易变动的开始....想请有经验的大大指点迷津,真的非常感谢! 我会时不时补充的!
欢迎大大加l i n e 好友(在我的个人档案)。有发问问题会优先丢网址给你
已经准备好改善我的程式码了~
疑问补充:
- namespace + class 的引入跟一堆 function 写在同个php 然后一次引入,这两者会有哪些差别?假设你有很多 function ,有些是后端需要,有些是前端显示需要,你会怎么摆?
- 每个页面都引入 sql connect,跟 OOP connect作法有什么差别?
- js 的管理?假设同一个js档案中有很多 click, mouse 事件,你会写在同一个js档案吗?
- 我在同一个js档案中会放置多个 ajax function,也是利用 type 来决定要去找哪个 ajax ,如果是你你会怎么做?
- css,js 你会在一开始就将css,js 全部引入吗?或是能用什么方式有效分开?使该出现的时候再出现,我是用 switch 作法,你会怎么做?
- 我的 update.php 作法是好的吗?如果是你会怎么做?
- 在一个 php 的文件中,基本会有两个档案引入,header.php, footer.php,这是可以的做法吗?
看了一下你说的技术...感觉已经过时很久了...
1.先说第一个问题,这个就是惰性加载autoload的问题,只有在用到这个类的时候才加载,否则不加,这个是可以去掉多余不用的加载,同时也让代码少了一堆引入,会好看很多
2.sql的问题是最大,其实应该是用到了才连接sql,不用就不连接,这点请参考MVC模式(当然,这个MVC也过时了)
3.js肯定是一个页面一个js,然后有个公共方法的public.js或者common.js
4.其实这个问题就是MVC模式能够解决的问题
5.同上,参考MVC模式
6.没见过这种骚操作,都是用router去决定访问哪个文件中什么function
7.不太可用,就是一个autoload的问题,早就有解决方案了,composer了解一下