仓酷云

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

[学习教程] PHP教程之一步步编写PHP的Framework(四)

[复制链接]
海妖 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-3 23:29:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
会PHP吗?会,我会把一加一的运算写在函数里,然后调用啦!     
  上一篇文章我提了一个成绩,怎样完成主动载入一个类呢?
  实践上PHP已有响应的机制可以完成这个功效了,这个机制就是autoload,它会在试图利用还没有被界说的类时主动挪用。
  如今咱们可以在Route.php中的开首界说autoload函数(固然,如许是不标准的,然而为了复杂,先这么做)。
  咱们如今的主动导入需求导入两类文件,一类是框架类文件,别的一类是用户使用模块的类文件,为了简化代码,可以假定框架的一切文件都寄存在/Library/Test目次上面,用户类文件都寄存在/UserApps/Modules目次上面,而且只会在Controllers,Models,Helpers这三个目次上面,而且这几个目次上面没有子目次。
  关于这个主动导入的函数,它需求起首测验考试导入框架类文件,假如该文件不存在,申明是用户类文件,然后再测验考试导入用户类文件,假如是,那末include它。
  注重:
  因为要频仍利用UserApps/Modules这个目次,所以我界说了一个MODULES_PATH这个常量;
01 function __autoload($className) { 02     $frameworkFileName = FRAMEWORK_PATH . '/' . $className . '.php'; 03     if(is_file($frameworkFileName)) { 04         include $frameworkFileName; 05     } else { 06         //用户类文件 07         $controllerFileName = MODULES_PATH . '/Controllers/' . $className . '.php'; 08         if(is_file($controllerFileName)) { 09             include $controllerFileName; 10         } else { 11             $modelFileName = MODULES_PATH . '/Models/' . $className . '.php'; 12             if(is_file($modelFileName)) { 13                 include $modelFileName; 14             } else { 15                 $helperFileName = MODULES_PATH . '/Helpers/' . $className . '.php'; 16                 if(is_file($helperFileName)) { 17                     include $helperFileName; 18                 } else { 19                     throw new Exception("class not found"); 20                 } 21             } 22         } 23     } 24 }             当你把这个函数写完以后,可以在之前已写好的IndexController.php中去测试一下,好比在和IndexController统一目次上面创立一个文件Test.php,文件代码以下:
1 <?php 2 class Test { 3       public function test() { 4          echo 'Test'; 5       } 6 }  然后在IndexController.php中利用以下:
1 <?php 2 class IndexController { 3     public function index() { 4         $test = new Test(); 5                 $test->test(); 6     } 7 }  假如呈现Test,那末祝贺你,主动导入胜利了!!
   
  如今再思索一下,假如针对一个很庞杂的项目,利用这类体例来主动导入,有甚么成绩吗?
  其实成绩是对照严重的,起首关于框架的文件,咱们不成能将一切文件都寄存在一个目次上面,如许当文件多了以后就检索就费事了;关于用户类文件,好比掌握器的文件,咱们不成能将它全体寄存在一个目次上面,咱们需求依照模块切分目次等。假如用__autoload来完成的话,这个函数的代码量就太大了,并且假如有一个中央的修正那末便可能牵一发而动全身,如许关于项目标保护是很晦气的。
  那末咱们怎样处理这个成绩呢?
  办法一:
  咱们界说良多帮助函数,好比导入框架文件,咱们界说一个frameworkAutoloadHelper,关于用户文件界说一个userAutoloadHelper,然后将营业逻辑寄存在这两个函数中,最初在__autoload中挪用这两个函数便可,当用户功效需求修正的时分,代码保护性就好一些了;
  办法2:
  在SPL中已界说了一个spl_autoload_register,可使用这个来说主动导入的功效分摊到多个类中,并且还可以将主动导入的掌握权交给用户,这关于框架来讲是对照主要的,所以,我保举利用这类体例。
  详细这类体例怎样完成,读者可以本人查查PHP手册。
  当咱们利用了spl_autoload_register以后,是否是一切就万事大吉了?
  其实不是,咱们如今可以想一下是不是可以去除主动导入呢,由于当营业逻辑很庞杂而且主动导入设计的又不是出格好的时分,主动导入的效力就不是很高了!!
  不必主动导入,岂非仍是利用include?No。
  人人都晓得include,include_once,require,require_once的区分吧!!
  include和require每次挪用城市包括这个文件,include_once和require_once只会导入一次,include假如包括了一个不存在的文件,只会抛出正告,法式会持续履行,而require会中断履行,所以这四个函数我对照建议利用require_once,然而很遗憾,这个函数效力很低,由于它要思索的器材太多了!!
  PS:利用这四个函数的时分,最好利用相对途径,如许效力要高一些;
  假如咱们利用require,那末效力会高良多,然而假如利用require怎样完成require_once的功效呢?
  我给人人供应一个思绪,利用static变量:
1 <?php 2 function testRequireOnce($file) { 3       static $_config = array(); 4       if(!isset($_config[$file])) { 5          require $file; 6          $_config[$file] = $file; 7       } 8 }   
  固然,还可使用class_exists来剖断。
建议大家买一本书,而不光是在网上看一些零碎的资料,一本书毕竟会讲的系统一些,全面一些,而且印刷的书不受电脑的限制,但是建议在看书的时候最好旁边有电脑,这样可以很及时地上机实践。
金色的骷髅 该用户已被删除
沙发
发表于 2015-2-3 23:39:59 | 只看该作者
首推的搜索引擎当然是Google大神,其次我比较喜欢 百度知道。不过搜出来的结果往往都是 大家copy来copy去的,运气的的概率很大。
admin 该用户已被删除
板凳
发表于 2015-2-6 21:29:30 | 只看该作者
因为blog这样的可以让你接触更多要学的知识,可以接触用到类,模板,js ,ajax
愤怒的大鸟 该用户已被删除
地板
发表于 2015-2-18 15:51:13 | 只看该作者
个人呢觉得,配wamp 最容易漏的一步就是忘了把$PHP$目录下的libmysql.dll拷贝到windows系统目录的system32目录下,还有重启apache。
因胸联盟 该用户已被删除
5#
发表于 2015-3-6 08:33:42 | 只看该作者
本人接触php时间不长,算是phper中的小菜鸟一只吧。由于刚开始学的时候没有名师指,碰过不少疙瘩,呗很多小问题卡过很久,白白浪费不少宝贵的时间,在次分享一些子的学习的心得。
乐观 该用户已被删除
6#
发表于 2015-3-12 22:33:48 | 只看该作者
当留言板完成的时候,下步可以把做1个单人的blog程序,做为目标,
活着的死人 该用户已被删除
7#
发表于 2015-3-14 10:42:39 | 只看该作者
本文当是我的笔记啦,遇到的问题随时填充
海妖 该用户已被删除
8#
 楼主| 发表于 2015-3-19 16:00:23 | 只看该作者
微软最近出的新字体“微软雅黑”,虽然是挺漂亮的,不过firefox  支持的不是很好,所以能少用还是少用的好。
小妖女 该用户已被删除
9#
发表于 2015-3-28 14:45:30 | 只看该作者
在我安装pear包的时候老是提示,缺少某某文件,才发现 那群extension 的排列是应该有一点的顺序,而我安装的版本的排序不是正常的排序。没办法我只好把那群冒号加了上去,只留下我需要使用的扩展。
再现理想 该用户已被删除
10#
发表于 2015-4-1 14:50:06 | 只看该作者
开发工具也会慢慢的更专业,每个公司的可能不一样,但是zend studio是个大伙都会用的。
山那边是海 该用户已被删除
11#
发表于 2015-4-1 18:31:39 | 只看该作者
对于懒惰的朋友,我推荐php的集成环境xampp或者是wamp。这两个软件安装方便,使用简单。但是我还是强烈建议自己动手搭建开发环境。
第二个灵魂 该用户已被删除
12#
发表于 2015-4-9 16:00:42 | 只看该作者
爱上php,他也会爱上你。
蒙在股里 该用户已被删除
13#
发表于 2015-4-12 18:24:30 | 只看该作者
遇到出错的时候,我经常把错误信息直接复制到 google的搜索栏,一般情况都是能搜到结果的,不过有时候会搜出来一大片英文的出来,这时候就得过滤一下,吧中文的弄出来,挨着式方法。
透明 该用户已被删除
14#
发表于 2015-4-15 01:49:43 | 只看该作者
我要在声明一下:我是个菜鸟!!我对php这门优秀的语言也是知之甚少。但是我要在这里说一下php在网站开发中最常用的几个功能:
15#
发表于 2015-4-21 05:47:58 | 只看该作者
基础有没有对学习php没有太大区别,关键是兴趣。
小魔女 该用户已被删除
16#
发表于 2015-4-21 07:57:52 | 只看该作者
再就是混迹于论坛啦,咱们的phpchina的论坛就很强大,提出的问题一般都是有达人去解答的,以前的帖子也要多看看也能学到不少前辈们的经验。别的不错的论坛例如php100,javaeye也是很不错的。
谁可相欹 该用户已被删除
17#
发表于 2015-6-12 03:37:26 | 只看该作者
学好程序语言,多些才是王道,写两个小时代码的作用绝对超过看一天书,这个我是深有体会(顺便还能练打字速度)。
莫相离 该用户已被删除
18#
发表于 2015-6-13 21:52:00 | 只看该作者
我学习了一段时间后,我发现效果并不好(估计是我自身的问题)。因为一个人的精力总是有限的,同时学习这么多,会导致每个的学习时间都得不到保证。
只想知道 该用户已被删除
19#
发表于 2015-6-16 23:33:31 | 只看该作者
其实没啥难的,多练习,练习写程序,真正的实践比看100遍都有用。不过要熟悉引擎
飘灵儿 该用户已被删除
20#
发表于 2015-7-6 00:53:54 | 只看该作者
小鸟是第一次发帖(我习惯潜水的(*^__^*) 嘻嘻……),有错误之处还请大家批评指正,另外,前些日子听人说有高手能用php写驱动程序,真是学无止境,人外有人,天外有天。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-12-23 18:10

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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