|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
PHP于1994年由Rasmus Lerdorf创建,刚刚开始是Rasmus Lerdorf为了要维护个人网页而制作的一个简单的用Perl语言编写的程序。
既然前端掌握器掌握一切,那末咱们可以用它来做更多的工作!!
咱们晓得,在windows外面默许php.ini中display_errors默许开启,而在linux中默许是封闭的,那末如许关于法式的调试时很费事的,所以咱们可以在设置装备摆设文件中设置一个debug属性,它代表是不是调试翻开,假如翻开调试,法式呈现任何异常,那末会输入良多调试信息。在这儿,我只是很复杂的设置一下,真实的框架调试功效一定不是如许复杂的。
先咱们完成假如debug开启,那末显示调试信息debug mode:如许一个字符串,而且假如法式有语法或其他毛病,显示毛病信息,假如调试封闭,那末任何毛病信息都不显示。
如今修正FrontController的__construct函数:
01 private function __construct() { 02 C(Config::factory(Config::PHP)); //写入设置装备摆设信息 03 session_start(); 04 if(true === C('debug')) { 05 echo 'debug mode:'; 06 ini_set('display_errors','On'); 07 error_reporting(C('errorReporting')); 08 } else { 09 error_reporting(0); 10 ini_set('display_errors','Off'); 11 } 12 } 在这个函数中,次要就新增了调试功效而且默许翻开了session,因为PHP中关于毛病的设置装备摆设次要有error_reporting函数和php.ini中的display_errors这一项,所以只需求设置这两项,不论操作体系是甚么样的,都可以好好的掌握住调试信息了。
写过PHP法式的人能够城市晓得,PHP默许的时区不是中国的,所以假如你利用date函数掏出以后工夫戳的时分,会发明不合错误,所以需求明白指准时区,其实这个任务就能够完整由框架完成,只需在设置装备摆设文件中写入时区的值,然后框架挪用date_default_timezone_set这个函数设置时区便可。
如许的话,FrontController的__construct这个函数就酿成了上面如许了:
01 private function __construct() { 02 C(Config::factory(Config::PHP)); //写入设置装备摆设信息 03 session_start(); 04 date_default_timezone_set(C('timeZone')); 05 if(true === C('debug')) { 06 echo 'debug mode:'; 07 ini_set('display_errors','On'); 08 error_reporting(C('errorReporting')); 09 } else { 10 error_reporting(0); 11 ini_set('display_errors','Off'); 12 } 13 }
假如人人看过Toper的源码的FrontController.class.php这个文件的话,就会注重到这个文件代码也仍是挺多的,其实不像我如今这儿写的如许,只要二十多行,这实践上是由于一个Framework的FrontController还需求做良多其他的工作,好比避免CSRF进击,撑持自界说设置装备摆设项等,而这些因为篇幅缘由我写不了。
设置debug形式在真实的Framework也不是只输入debug mode:如许一个字符串罢了,这点人人必需要清晰。
学过Java的人都晓得在Java中一切对象都有一个基类Object,在框架中是不是也能够利用一个基类呢?
这个基类做一些甚么功效呢,好比当挪用了一个类的不存在 的办法,那末它会挪用__call这个魔术办法,假如咱们在基类中掩盖这个办法,那末其他一切类承继这个类,挪用这些类的办法的时分,假如不存在,天然也就转到了这个办法,在这个办法中可以做一些弥补办法,如许总比直接输出办法不存在要好一些。
咱们临时就把这个基类称为Base,在Toper中,这个基类叫Tp。
先贴出Base.php的源码:
01 <?php 02 class Base { 03 public function __call($name,$arguments) { 04 if(true === C('debug')) { 05 echo 'not exists method:'; 06 echo 'the name is :'; 07 var_dump($name); 08 echo 'the arguments is :'; 09 var_dump($arguments); 10 } 11 throw new Exception('not exists method'); 12 } 13 } 临时功效写复杂一点,假如调试翻开,那末就把不存在的办法名和参数输入来,如许关于开辟者更轻易找到毛病产生的地位,固然,不论调试是不是翻开,Exception一定是要抛出的。固然,在线上的时分,假如呈现这类成绩,能直接把异常信息展示在页面上吗,不克不及,最好是能将异常信息输入到日记文件,然后页面跳转到毛病页,那如许最好咱们自界说一套异常处置的类,这些类承继自Exception,然后剖断是不是debug开启,假如开启debug,那末直接输入信息,不然,将异常信息输入到日记文件,然后跳转到毛病页,详细怎样做,你可以本人试一试!!!
不晓得人人注重到没有,一切我写的php文件我都没有写php的停止符?>,这是为何呢?
实践上很复杂,我举一个例子:
如今有a.php和b.php,a.php的源码是如许:
1 <?php 2 //这个中央貌似没有输入哦 3 ?> 然后b.php的源码是如许:
1 <?php 2 include a.php 3 session_start(); 4 ?>
假如人人运转一下,会发明它会抛出正告说header already send out ,为何呢?
次要是a.php在PHP停止符挪用以后还有几行空白,那末PHP会以为它是HTML代码,如许是否是在挪用session_start之前,就已有header输入了嘛,咱们晓得,挪用session_start之前,是不克不及有任何输入的,所以法式就会抛出正告。
假如利用?>,那末咱们能够会在不经意间犯这个毛病,当项目大,代码量大以后,要找到如许一个成绩是很难的,如许给代码的保护带来很严重的成绩,所以,最好在PHP文件最初不要写?>,这也是zend官方保举的做法。
在一个团队之中或者说是在一个公司的工作岗位上,需要注重团队之间的交流合作;在学习或工作上都要端正自己的态度,要以认真的态度来对每件事,这样才能让自己更快的投入、更快的学习,而不至于浪费自己的时间。 |
|