仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1401|回复: 18
打印 上一主题 下一主题

[学习教程] PHP网站制作之一步步编写PHP的Framework(三)

[复制链接]
若天明 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-3 23:29:26 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
在一个团队之中或者说是在一个公司的工作岗位上,需要注重团队之间的交流合作;在学习或工作上都要端正自己的态度,要以认真的态度来对每件事,这样才能让自己更快的投入、更快的学习,而不至于浪费自己的时间。     
          依照上一次我讲的内容,一个根基的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-6-10 12:01:51 | 显示全部楼层
作为一个合格的coder 编码的规范是必须,命名方面我推崇“驼峰法”,另外就是自己写的代码最好要带注释,不然时间长了,就算是自己的代码估计看起来都费事,更不用说别人拉。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-21 16:43

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表