仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1366|回复: 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-2-3 23:39:59 | 只看该作者
我学习了一段时间后,我发现效果并不好(估计是我自身的问题)。因为一个人的精力总是有限的,同时学习这么多,会导致每个的学习时间都得不到保证。
深爱那片海 该用户已被删除
板凳
发表于 2015-2-6 21:29:30 | 只看该作者
建议加几个专业的phper的群,当然啦需要说话的人多,一处一点问题能有人回答你的,当然啦要让人回答你的问题,平时就得躲在里面聊天,大家混熟啦,愿意回答你问题的人自然就多啦。
飘灵儿 该用户已被删除
地板
发表于 2015-2-18 19:45:49 | 只看该作者
多看优秀程序员编写的代码,仔细理解他们解决问题的方法,对自身有很大的帮助。
admin 该用户已被删除
5#
发表于 2015-3-6 09:29:55 | 只看该作者
Ps:以上纯属原创,如有雷同,纯属巧合
莫相离 该用户已被删除
6#
发表于 2015-3-12 23:14:35 | 只看该作者
说点我烦的低级错误吧,曾经有次插入mysql的时间 弄了300年结果老报错,其实mysql的时间是有限制的,大概是到203X年  具体的记不清啦,囧。
简单生活 该用户已被删除
7#
发表于 2015-3-21 02:00:58 | 只看该作者
使用zendstdio 写代码的的时候,把tab 的缩进设置成4个空格是很有必要的
若相依 该用户已被删除
8#
发表于 2015-4-1 18:31:39 | 只看该作者
小鸟是第一次发帖(我习惯潜水的(*^__^*) 嘻嘻……),有错误之处还请大家批评指正,另外,前些日子听人说有高手能用php写驱动程序,真是学无止境,人外有人,天外有天。
透明 该用户已被删除
9#
发表于 2015-4-12 18:24:30 | 只看该作者
基础有没有对学习php没有太大区别,关键是兴趣。
爱飞 该用户已被删除
10#
发表于 2015-4-14 08:28:39 | 只看该作者
有位前辈曾经跟我说过,phper 至少要掌握200个函数 编起程序来才能顺畅点,那些不熟悉的函数记不住也要一拿手册就能找到。所以建议新手们没事就看看php的手册(至少array函数和string函数是要记牢的)。
只想知道 该用户已被删除
11#
发表于 2015-4-21 05:47:58 | 只看该作者
真正的方向了,如果将来要去开发团队,你一定要学好smarty ,phplib这样的模板引擎,
小女巫 该用户已被删除
12#
发表于 2015-4-21 07:57:52 | 只看该作者
如果你已经到这种程度了,那么你已经可以做我的老师了。其实php也分很多的区域,
若天明 该用户已被删除
13#
 楼主| 发表于 2015-6-10 12:01:51 | 只看该作者
作为一个合格的coder 编码的规范是必须,命名方面我推崇“驼峰法”,另外就是自己写的代码最好要带注释,不然时间长了,就算是自己的代码估计看起来都费事,更不用说别人拉。
第二个灵魂 该用户已被删除
14#
发表于 2015-6-12 03:37:26 | 只看该作者
如果你已经到这种程度了,那么你已经可以做我的老师了。其实php也分很多的区域,
分手快乐 该用户已被删除
15#
发表于 2015-6-18 21:36:25 | 只看该作者
开发工具也会慢慢的更专业,每个公司的可能不一样,但是zend studio是个大伙都会用的。
海妖 该用户已被删除
16#
发表于 2015-7-6 00:53:54 | 只看该作者
首先我是坚决反对新手上来就用框架的,因为对底层的东西一点都不了解,造成知识上的真空,会对以后的发展不利。我的观点上手了解下框架就好,代码还是手写。当然啦如果是位别的编程语言的高手的话,这个就另当别论啦。
不帅 该用户已被删除
17#
发表于 2015-7-6 01:09:11 | 只看该作者
做为1门年轻的语言,php一直很努力。
小魔女 该用户已被删除
18#
发表于 2015-7-13 11:33:39 | 只看该作者
最后祝愿,php会给你带来快乐的同时 你也会给他带来快乐。
灵魂腐蚀 该用户已被删除
19#
发表于 2015-7-18 13:58:25 | 只看该作者
开发工具也会慢慢的更专业,每个公司的可能不一样,但是zend studio是个大伙都会用的。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-4-30 13:20

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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