若天明 发表于 2015-2-3 23:29:26

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的确相当的简单,但是如果你之前什么都没学过,那么阿弥陀佛,硬着头皮琢磨吧。

仓酷云 发表于 2015-2-3 23:39:59

我学习了一段时间后,我发现效果并不好(估计是我自身的问题)。因为一个人的精力总是有限的,同时学习这么多,会导致每个的学习时间都得不到保证。

深爱那片海 发表于 2015-2-6 21:29:30

建议加几个专业的phper的群,当然啦需要说话的人多,一处一点问题能有人回答你的,当然啦要让人回答你的问题,平时就得躲在里面聊天,大家混熟啦,愿意回答你问题的人自然就多啦。

飘灵儿 发表于 2015-2-18 19:45:49

多看优秀程序员编写的代码,仔细理解他们解决问题的方法,对自身有很大的帮助。

admin 发表于 2015-3-6 09:29:55

Ps:以上纯属原创,如有雷同,纯属巧合

莫相离 发表于 2015-3-12 23:14:35

说点我烦的低级错误吧,曾经有次插入mysql的时间 弄了300年结果老报错,其实mysql的时间是有限制的,大概是到203X年具体的记不清啦,囧。

简单生活 发表于 2015-3-21 02:00:58

使用zendstdio 写代码的的时候,把tab 的缩进设置成4个空格是很有必要的

若相依 发表于 2015-4-1 18:31:39

小鸟是第一次发帖(我习惯潜水的(*^__^*) 嘻嘻……),有错误之处还请大家批评指正,另外,前些日子听人说有高手能用php写驱动程序,真是学无止境,人外有人,天外有天。

透明 发表于 2015-4-12 18:24:30

基础有没有对学习php没有太大区别,关键是兴趣。

爱飞 发表于 2015-4-14 08:28:39

有位前辈曾经跟我说过,phper 至少要掌握200个函数 编起程序来才能顺畅点,那些不熟悉的函数记不住也要一拿手册就能找到。所以建议新手们没事就看看php的手册(至少array函数和string函数是要记牢的)。

只想知道 发表于 2015-4-21 05:47:58

真正的方向了,如果将来要去开发团队,你一定要学好smarty ,phplib这样的模板引擎,

小女巫 发表于 2015-4-21 07:57:52

如果你已经到这种程度了,那么你已经可以做我的老师了。其实php也分很多的区域,

若天明 发表于 2015-6-10 12:01:51

作为一个合格的coder 编码的规范是必须,命名方面我推崇“驼峰法”,另外就是自己写的代码最好要带注释,不然时间长了,就算是自己的代码估计看起来都费事,更不用说别人拉。

第二个灵魂 发表于 2015-6-12 03:37:26

如果你已经到这种程度了,那么你已经可以做我的老师了。其实php也分很多的区域,

分手快乐 发表于 2015-6-18 21:36:25

开发工具也会慢慢的更专业,每个公司的可能不一样,但是zend studio是个大伙都会用的。

海妖 发表于 2015-7-6 00:53:54

首先我是坚决反对新手上来就用框架的,因为对底层的东西一点都不了解,造成知识上的真空,会对以后的发展不利。我的观点上手了解下框架就好,代码还是手写。当然啦如果是位别的编程语言的高手的话,这个就另当别论啦。

不帅 发表于 2015-7-6 01:09:11

做为1门年轻的语言,php一直很努力。

小魔女 发表于 2015-7-13 11:33:39

最后祝愿,php会给你带来快乐的同时 你也会给他带来快乐。

灵魂腐蚀 发表于 2015-7-18 13:58:25

开发工具也会慢慢的更专业,每个公司的可能不一样,但是zend studio是个大伙都会用的。
页: [1]
查看完整版本: PHP网站制作之一步步编写PHP的Framework(三)