加载中…
个人资料
shalalal
shalalal
  • 博客等级:
  • 博客积分:0
  • 博客访问:33,436
  • 关注人气:13
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
谁看过这篇博文
加载中…
正文 字体大小:

再议PHP的Debug工作机制的应用

(2012-07-01 15:51:05)
标签:

monkeyphp

php代码调试

工作机制

框架

it

分类: 电脑技术

前一篇文章,我们详细了解了PHP的Debug工作机制,但遗憾的是当时写的过于粗糙,很多网友不明白其中道理,缺少可操作性。今天写完MonkeyPHP后,觉得有必要将MonkeyPHP是如何利用这一理论的经验分享给大家。

MonkeyPHP的Debug架构比较的复杂,不过庆幸的是大部分复杂的工作已经由框架完成了,开发者只需要做很少的工作,甚至如果愿意使用框架默认的处理程序,那开发者不需要做任何工作!(完整的源码在MonkeyPHP框架中:http://code.google.com/p/monkey-php/

首先来看看MonkeyPHP的Debug架构图:

再议PHP的Debug工作机制的应用

我们解释一下上图:

1、浏览器看到的错误提示从哪里来?

一是编译时产生的错误,即最右上角的直接提示,因为编译阶段代码还没有开始运行,所以无论php程序如何努力,都无法捕获,因此就直接提示了;

二是系统产生的异常和错误,这是在程序运行时产生的,本来是直接提示到浏览器的,但是MonkeyPHP阻止了这个事件,因此图中系统级别的错误和异常没有输出,而是转向了框架的异常和错误处理;

三是框架的异常和错误处理,本来可以由框架直接给出浏览器的提示,但这不够灵活也不能满足开发者对完全控制异常和错误的需求,因此交给MonkeyPHP的错误管理类统一委托给MonkeyPHP的错误处理机制来管理;

四是开发者通过向MonkeyPHP的错误处理机制注册不同的处理类来显示不同的提示形式,如友好的提示,还是专业的提示。

通过上述分析,能够输出到屏幕的调试信息只有两类地方,共三处通道。

2、框架都干了什么?

一是接管系统的异常和错误,并把所有的异常和错误都交给MonkeyPHP错误管理类;

二是将所有的异常和错误委托给MonkeyPHP错误处理机制;

三是将准备好的调试信息传递给开发者已注册的信息显示类显示或者写入错误日志等,这个决定权交给开发者,框架只负责传递信息;

四是当开发者放弃或没有注册信息显示类时,提供了两个默认的信息显示类。

3、开发者可以做什么?

编写信息显示类,并在配置文件中注册。

4、系统已经提供了默认的显示类,为什么还要开发者编写?

一是默认的没有具体网站的特色广告效应,框架没有加入广告。

二是默认只是提供了web1.0技术的显示方案,缺少代表web2.0技术的ajax访问时的显示方案,显然ajax下不能直接向浏览器输出html文件流,而是向浏览器输出json对象流。因为每个开发者的json对象的条用接口都不统一,因此没有强迫开发者使用MonkeyPHP的json接口,所以也就没有编写这个错误显示方案了。

实现
=============================

根据上节教程的Debug架构,MonkeyPHP给出了如下的类来实现这个架构:

再议PHP的Debug工作机制的应用

上面冷色的四个类是MonkeyPHP框架的,其中前三个是不需要开发者学习的(了解一下也是不错的),第四个是一个抽象类开发者要熟悉并实现它。

上图后两个暖色的类是开发者可以自己实现的,当然MonkeyPHP已为你提供了默认的实现。

现在介绍一下框架的抽象错误处理接口类(frameworkErrorHandler):

再议PHP的Debug工作机制的应用

接下来看看默认的错误处理实现:

1、调试阶段的错误处理,非常简单,仅仅是将错误信息输出到指定的浏览器模板:

再议PHP的Debug工作机制的应用

2、发布阶段的错误处理,除了将错误信息输出到指定的浏览器模板外,稍微多了一点东西——将专业信息输出到日志文件:

再议PHP的Debug工作机制的应用

最后介绍如何注册这些错误处理类并让它工作起来的:

1、框架内部已经通过读取并注册了debug配置中的错误处理类:

再议PHP的Debug工作机制的应用

首先读取调试级别。根据调试级别做了三件事,一件是设置系统的调试级别,另一件是决定是否捕获系统的错误和异常(不启用调试时捕获没有意义),第三件是选择是用调试阶段的错误处理类还是发布阶段的处理类。

其次注册已经选好的错误处理类。

所以,开发者希望自己实现的错误处理类要运转起来,最省事的做法是在调试配置中设置。

2、MonkeyPHP同时也为开发者提供了其他方法来注册自己的错误处理类:

再议PHP的Debug工作机制的应用
这句代码放在任何地方都有效,但有效的范围是这行代码执行之后程序。要想在任何范围都有效,还是建议在配置文件中设置。

0

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有