PHP网站制作之一步步编写PHP的Framework(三)
在一个团队之中或者说是在一个公司的工作岗位上,需要注重团队之间的交流合作;在学习或工作上都要端正自己的态度,要以认真的态度来对每件事,这样才能让自己更快的投入、更快的学习,而不至于浪费自己的时间。依照上一次我讲的内容,一个根基的MVC构架是已搭建起来了的,然而自己还存在良多成绩,如:模子这一起每次毗连DB,封闭DB的代码冗余,视图这一起仍是PHP代码,每一个文件要利用良多include代码等等。
要编写一个框架,那末起首就要划定一个尺度的目次布局,咱们临时把这个目次布局定逝世,不答应用户修正,如许可以削减代码量,便利人人看的更分明。
因为之前编写了Toper,所以我筹办沿用Toper的目次布局来做演示:
Library(框架寄存目次)
Test(假定这个框架名就叫test)
UserApps (用户的APP寄存目次)
Configs(设置装备摆设文件寄存目次)
Modules(模块寄存目次)
Controllers (一切掌握器寄存目次)
Models (模子寄存目次)
Views (视图寄存目次)
Helpers (帮助文件目次)
Plugins(插件寄存目次,临时用不上)
Public (网站根目次)
index.php (最主要的进口文件)
这个中央有点需求注释一下,Public目次才是网站的根目次,Library目次和UserApps目次是寄存在网站根目次以外的,如许用户经由过程阅读器会见时就不克不及直接会见这个PHP文件,如许可以进步网站的平安性。
之前咱们把路由的功效全体放在进口文件这一起,实践上这是不适合的,进口文件不该该做这些逻辑的处置,所以咱们把之前寄存在进口文件的代码迁徙到library目次的Test目次上面,因为之前在进口文件中完成的功效是路由,所以咱们把代码迁徙到Route.php,这个文件就完成路由的功效。
好,咱们来看看Route.php这个文件的内容:
01 <?php 02 class Route { 03 public static function run() { 04 $controller = empty($_GET['c']) ? 'Index' : trim($_GET['c']); //设置了默许的掌握器 05 $action = empty($_GET['a']) ? 'index' : trim($_GET['a']); //设置了默许的Action 06 $controllerBasePath = dirname(__FILE__) . '/../../UserApps/Modules/Controllers/'; 07 $controllerFilePath = $controllerBasePath . $controller . 'Controller.php'; 08 if(is_file($controllerFilePath)) { 09 include $controllerFilePath; 10 $controllerName = $controller . 'Controller'; 11 if(class_exists($controllerName)) { 12 $controllerHandler = new $controllerName(); 13 if(method_exists($controllerHandler,$action)) { 14 $controllerHandler->$action(); 15 } else { 16 echo 'the method does not exists'; 17 } 18 } else { 19 echo 'the class does not exists'; 20 } 21 } else { 22 echo 'controller not exists'; 23 } 24 } 25 } 这个时分,看到没,咱们只是把之前放在进口文件的代码拷贝到Route.php这个文件中了,那末如许有甚么优点呢?
进口文件代码少了!!!
1 <?php 2 include dirname(__FILE__) . '/../Library/Test/Route.php'; 3 Route::run(); 只要两行的代码,够简约吧!!
然而你看到一个成绩没有,每次我都需求利用dirname来肯定以后途径,而假如这个框架中有20个文件,每一个文件中有3处利用dirname来获得相对途径,那末感到到可骇了吧,90处反复代码,假如今后途径一修正,那将会是你的恶梦!!
所以,咱们无妨在进口文件界说一个途径,这个途径作为APP的基途径,因为咱们常常也会利用Library上面的Test目次途径,咱们也设置一个框架途径,所以,进口文件修正为:
1 <?php 2 defined('APP_PATH') define('APP_PATH',dirname(__FILE__) . '/..'); 3 defined('FRAMEWORK_PATH') define('FRAMEWORK_PATH',APP_PATH . '/Library/Test'); 4 include FRAMEWORK_PATH . '/Route.php'; 5 Route::run(); 那末Route.php响应的也需求修正:
01 <?php 02 class Route { 03 public static function run() { 04 $controller = empty($_GET['c']) ? 'Index' : trim($_GET['c']); //设置了默许的掌握器 05 $action = empty($_GET['a']) ? 'index' : trim($_GET['a']); //设置了默许的Action 06 $controllerBasePath = APP_PATH . '/UserApps/Modules/Controllers/'; 07 $controllerFilePath = $controllerBasePath . $controller . 'Controller.php'; 08 if(is_file($controllerFilePath)) { 09 include $controllerFilePath; 10 $controllerName = $controller . 'Controller'; 11 if(class_exists($controllerName)) { 12 $controllerHandler = new $controllerName(); 13 if(method_exists($controllerHandler,$action)) { 14 $controllerHandler->$action(); 15 } else { 16 echo 'the method does not exists'; 17 } 18 } else { 19 echo 'the class does not exists'; 20 } 21 } else { 22 echo 'controller not exists'; 23 } 24 } 25 } 如今看这个代码是否是要很多多少了!!!
然而经由过程MVC来构建使用的时分,常常会一个文件include良多类,那末是不是框架可以完成主动导入类,而不采取手动include呢,请持续存眷我的日记!!
PHP的理解是新手最难迈过的一道门槛,不过你应该感到幸运的是PHP已经最大极限的为了新手而努力了,如果你学过其他的语言,也许会觉得PHP的确相当的简单,但是如果你之前什么都没学过,那么阿弥陀佛,硬着头皮琢磨吧。 我学习了一段时间后,我发现效果并不好(估计是我自身的问题)。因为一个人的精力总是有限的,同时学习这么多,会导致每个的学习时间都得不到保证。 建议加几个专业的phper的群,当然啦需要说话的人多,一处一点问题能有人回答你的,当然啦要让人回答你的问题,平时就得躲在里面聊天,大家混熟啦,愿意回答你问题的人自然就多啦。 多看优秀程序员编写的代码,仔细理解他们解决问题的方法,对自身有很大的帮助。 Ps:以上纯属原创,如有雷同,纯属巧合 说点我烦的低级错误吧,曾经有次插入mysql的时间 弄了300年结果老报错,其实mysql的时间是有限制的,大概是到203X年具体的记不清啦,囧。 使用zendstdio 写代码的的时候,把tab 的缩进设置成4个空格是很有必要的 小鸟是第一次发帖(我习惯潜水的(*^__^*) 嘻嘻……),有错误之处还请大家批评指正,另外,前些日子听人说有高手能用php写驱动程序,真是学无止境,人外有人,天外有天。 基础有没有对学习php没有太大区别,关键是兴趣。 有位前辈曾经跟我说过,phper 至少要掌握200个函数 编起程序来才能顺畅点,那些不熟悉的函数记不住也要一拿手册就能找到。所以建议新手们没事就看看php的手册(至少array函数和string函数是要记牢的)。 真正的方向了,如果将来要去开发团队,你一定要学好smarty ,phplib这样的模板引擎, 如果你已经到这种程度了,那么你已经可以做我的老师了。其实php也分很多的区域, 作为一个合格的coder 编码的规范是必须,命名方面我推崇“驼峰法”,另外就是自己写的代码最好要带注释,不然时间长了,就算是自己的代码估计看起来都费事,更不用说别人拉。 如果你已经到这种程度了,那么你已经可以做我的老师了。其实php也分很多的区域, 开发工具也会慢慢的更专业,每个公司的可能不一样,但是zend studio是个大伙都会用的。 首先我是坚决反对新手上来就用框架的,因为对底层的东西一点都不了解,造成知识上的真空,会对以后的发展不利。我的观点上手了解下框架就好,代码还是手写。当然啦如果是位别的编程语言的高手的话,这个就另当别论啦。 做为1门年轻的语言,php一直很努力。 最后祝愿,php会给你带来快乐的同时 你也会给他带来快乐。 开发工具也会慢慢的更专业,每个公司的可能不一样,但是zend studio是个大伙都会用的。
页:
[1]