蒙在股里 发表于 2015-2-3 23:29:33

PHP网页设计一步步编写PHP的Framework(八)

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官方保举的做法。
在一个团队之中或者说是在一个公司的工作岗位上,需要注重团队之间的交流合作;在学习或工作上都要端正自己的态度,要以认真的态度来对每件事,这样才能让自己更快的投入、更快的学习,而不至于浪费自己的时间。

乐观 发表于 2015-2-3 23:40:21

小鸟是第一次发帖(我习惯潜水的(*^__^*) 嘻嘻……),有错误之处还请大家批评指正,另外,前些日子听人说有高手能用php写驱动程序,真是学无止境,人外有人,天外有天。

小女巫 发表于 2015-2-9 07:29:33

你很难利用原理去编写自己的代码。对于php来说,系统的学习我认为还是很重要的,当你有一定理解后,你可你针对某种效果研究,我想那时你不会只是复制代码的水平了。

灵魂腐蚀 发表于 2015-2-27 04:28:09

至于模板嘛,各位高人一直以来就是争论不休,我一只小菜鸟就不加入战团啦,咱们新手还是多学点东西的好。

飘灵儿 发表于 2015-3-6 09:55:34

我要在声明一下:我是个菜鸟!!我对php这门优秀的语言也是知之甚少。但是我要在这里说一下php在网站开发中最常用的几个功能:

仓酷云 发表于 2015-3-7 00:53:45

要进行开发,搭建环境是首先需要做的事,windows下面我习惯把环境那个安装在C盘下面,因为我配的环境经常出现诡异事件,什么事都没做环境有的时候就不能用啦。

活着的死人 发表于 2015-3-13 23:09:27

php是动态网站开发的优秀语言,在学习的时候万万不能冒进。在系统的学习前,我认为不应该只是追求实现某种效果,因为即使你复制他人的代码调试成功,实现了你所期望的效果,你也不了解其中的原理。

愤怒的大鸟 发表于 2015-3-17 21:11:48

其实也不算什么什么心得,在各位大侠算是小巫见大巫了吧,望大家不要见笑,若其中有错误的地方请各位大虾斧正。

再见西城 发表于 2015-3-22 03:10:30

首先我是坚决反对新手上来就用框架的,因为对底层的东西一点都不了解,造成知识上的真空,会对以后的发展不利。我的观点上手了解下框架就好,代码还是手写。当然啦如果是位别的编程语言的高手的话,这个就另当别论啦。

冷月葬花魂 发表于 2015-3-23 00:58:27

先学习php和mysql,还有css(html语言很简单)我认为现在的效果比以前的方法好。

谁可相欹 发表于 2015-3-24 22:42:33

找到的的资料很多都是在论坛里的,需要注册,所以我一般没到一个论坛都注册一个id,所有的id都注册成一样的,这样下次再进来的时候就不用重复注册啦。当然有些论坛的某些资料是需要的付费的。

分手快乐 发表于 2015-3-26 21:10:12

使用 jquery 等js框架的时候,要随时注意浏览器的更新情况,不然很容易发生框架不能使用。

第二个灵魂 发表于 2015-4-10 16:12:24

因为blog这样的可以让你接触更多要学的知识,可以接触用到类,模板,js ,ajax

海妖 发表于 2015-4-16 01:43:45

至于模板嘛,各位高人一直以来就是争论不休,我一只小菜鸟就不加入战团啦,咱们新手还是多学点东西的好。

变相怪杰 发表于 2015-4-24 06:01:10

首先声明:我是一个菜鸟,是一个初学者。学习了一段php后总是感觉自己没有提高,无奈。经过反思我认为我学习过程中存在很多问题,我改变了学习方法后自我感觉有了明显的进步。

深爱那片海 发表于 2015-4-29 23:46:57

遇到出错的时候,我经常把错误信息直接复制到 google的搜索栏,一般情况都是能搜到结果的,不过有时候会搜出来一大片英文的出来,这时候就得过滤一下,吧中文的弄出来,挨着式方法。

admin 发表于 2015-7-4 05:13:31

刚开始安装php的时候,我图了个省事,把php的扩展全都打开啦(就是把php.ini 那一片 extension 前面的冒号全去掉啦),这样自然有好处,以后不用再需要什么功能再来打开。

飘飘悠悠 发表于 2015-7-6 14:47:38

本文当是我的笔记啦,遇到的问题随时填充

莫相离 发表于 2015-7-7 23:37:04

首先声明:我是一个菜鸟,是一个初学者。学习了一段php后总是感觉自己没有提高,无奈。经过反思我认为我学习过程中存在很多问题,我改变了学习方法后自我感觉有了明显的进步。

若天明 发表于 2015-7-13 22:37:05

做为1门年轻的语言,php一直很努力。
页: [1] 2
查看完整版本: PHP网页设计一步步编写PHP的Framework(八)