|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
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的确相当的简单,但是如果你之前什么都没学过,那么阿弥陀佛,硬着头皮琢磨吧。 |
|