异常信息的捕获对编程测试有着重要的意义,这里结合观察者模式,探索如何处理异常信息。
关于观察者模式,如果还没有接触过的话,博客园有很多优秀的博友做了详细的 解释。笔者觉得,所谓观察者模式,必须有两个重要组成部分:一个主题对象,多个观察者。在使用的时候,我们可以将观察者像插头一样插到主题对象这个插座上,利用主题对象完成相应功能。
既然观察者要作为插头,必须要有一个统一的口径才能插到相同的插座上,因而先定义一个接口,Exception_Observer.php:
相对于众多观察者,我们首先应该关注唯一的主题对象,Observer_Exception.php:
notify();
}
public function notify(){
foreach (self::$_observers as $observer) {
$observer->update($this);
}
}
}我们可以清楚地看到,静态变量$_observers用来放置插入的观察者,notify()用来通知所有观察者对象。
这里需要注意 $observer->update($this); 里面 $this 的用法,很多初学者会感到“原来 $this 也可以这么用啊”。
一个小问题: $_observers 不是静态变量可不可以? 这个问题我们后面回答。
定义两个观察者,原则上实现接口所定义的功能。
Email_Exception_Observer.php:
class Emailing_Exception_Observer implements Exception_Observer{
protected $_email="huanggbxjp@sohu.com";
function __construct($email=null)
{
if ($email!==null&&filter_var($email,FILTER_VALIDATE_EMAIL)) {
$this->_email=$email;
}
}
public function update(Observer_Exception $e){
$message="时间".date("Y-m-d H:i:s").PHP_EOL;
$message.="信息".$e->getMessage().PHP_EOL;
$message.="追踪信息".$e->getTraceAsString().PHP_EOL;
$message.="文件".$e->getFile().PHP_EOL;
$message.="行号".$e->getLine().PHP_EOL;
error_log($message,1,$this->_email);
}
}Logging_Exception_Observer.php:
_filename=$filename;
}
}
public function update(Observer_Exception $e){
$message="时间".date("Y-m-d H:i:s").PHP_EOL;
$message.="信息".$e->getMessage().PHP_EOL;
$message.="追踪信息".$e->getTraceAsString().PHP_EOL;
$message.="文件".$e->getFile().PHP_EOL;
$message.="行号".$e->getLine().PHP_EOL;
error_log($message,3,$this->_filename);
}
}设计完所有该有的主体对象和插件,我们做个小小的测试:
getMessage(); echo ""; } ?>
php是一个嵌套的缩写名称,是英文超级文本预处理语言,它的语法混合了C、Java、Perl以及php自创新的语法,主要用来做网站开发,许多小型网站都用php开发,因为php是开源的,从而使得php经久不衰。
上一篇:php中适配器模式的原理是什么
下一篇:php连接sftp的好处有哪些