Observer
来源:互联网 发布:lua for windows 64 编辑:程序博客网 时间:2024/05/29 03:37
<?php
//The Observer is a collaboration between an Observable class (the subject) and one or more
//Observer classes (the clients). The Observable class allows Observers to register with it. Then, whenever
//the state of the Observable object changes, all registered Observers are notified
abstract class Observer {
abstract function update($error_handler);
}
class FileErrorLogger extends Observer {
function __construct() {
}
function write($msg) {
$fh = fopen('./Log/' . date('Y-m-d') . '.txt', 'a');
fwrite($fh, date('Y-m-d H:i:s: ') . $msg . PHP_EOL);
fclose($fh);
}
function update($error_handler) {
$error = $error_handler->getState();
$this->write($error['msg']);
}
}
class EmailErrorLogger extends Observer {
private $_addr;
private $_subject;
function __construct($addr, $subject = 'Application Error Message') {
$this->_addr = $addr;
$this->_subject = $subject;
}
function mail($msg) {
// mail($this->_addr, $this->_subject, date('Y-m-d H:i:s :') . $msg);
echo "send mail $msg";
}
function update($error_handler) {
$error = $error_handler->getState();
$this->mail($error['msg']);
}
}
class SyslogErrorLogger extends Observer {
function SyslogErrorLogger($msg) {
define_syslog_variables();
openlog($msg, LOG_ODELAY, LOG_USER);
}
function log($msg) {
syslog(LOG_WARNING, $msg);
}
function update($error_handler) {
$error = $error_handler->getState();
$this->log($error[msg]);
}
}
class ErrorHandler {
private $_observers = array();
public $_error_info;
function attach(&$observer) {
$this->_observers[] = $observer;
}
function detach($observer) {
foreach ($this->_observers as $key => $value) {
if ($value === $observer) {
unset($this->_observers[$key]);
return;
}
}
}
function notify() {
foreach ($this->_observers as $key => $value) {
$observer = $value;
$observer->update($this);
}
}
function getState() {
return $this->_error_info;
}
function setState($info) {
$this->_error_info = $info;
$this->notify();
}
}
$f = new FileErrorLogger();
$e = new EmailErrorLogger('root@sina.com');
$log = new ErrorHandler();
$log->attach($f);
$log->attach($e);
$log->setState(array('msg' => 'error occurred ' . date('Y-m-d')));
var_dump($log);
$log->detach($f);
$log->detach($e);
var_dump($log);
var_dump($f, $e);
//The Observer is a collaboration between an Observable class (the subject) and one or more
//Observer classes (the clients). The Observable class allows Observers to register with it. Then, whenever
//the state of the Observable object changes, all registered Observers are notified
abstract class Observer {
abstract function update($error_handler);
}
class FileErrorLogger extends Observer {
function __construct() {
}
function write($msg) {
$fh = fopen('./Log/' . date('Y-m-d') . '.txt', 'a');
fwrite($fh, date('Y-m-d H:i:s: ') . $msg . PHP_EOL);
fclose($fh);
}
function update($error_handler) {
$error = $error_handler->getState();
$this->write($error['msg']);
}
}
class EmailErrorLogger extends Observer {
private $_addr;
private $_subject;
function __construct($addr, $subject = 'Application Error Message') {
$this->_addr = $addr;
$this->_subject = $subject;
}
function mail($msg) {
// mail($this->_addr, $this->_subject, date('Y-m-d H:i:s :') . $msg);
echo "send mail $msg";
}
function update($error_handler) {
$error = $error_handler->getState();
$this->mail($error['msg']);
}
}
class SyslogErrorLogger extends Observer {
function SyslogErrorLogger($msg) {
define_syslog_variables();
openlog($msg, LOG_ODELAY, LOG_USER);
}
function log($msg) {
syslog(LOG_WARNING, $msg);
}
function update($error_handler) {
$error = $error_handler->getState();
$this->log($error[msg]);
}
}
class ErrorHandler {
private $_observers = array();
public $_error_info;
function attach(&$observer) {
$this->_observers[] = $observer;
}
function detach($observer) {
foreach ($this->_observers as $key => $value) {
if ($value === $observer) {
unset($this->_observers[$key]);
return;
}
}
}
function notify() {
foreach ($this->_observers as $key => $value) {
$observer = $value;
$observer->update($this);
}
}
function getState() {
return $this->_error_info;
}
function setState($info) {
$this->_error_info = $info;
$this->notify();
}
}
$f = new FileErrorLogger();
$e = new EmailErrorLogger('root@sina.com');
$log = new ErrorHandler();
$log->attach($f);
$log->attach($e);
$log->setState(array('msg' => 'error occurred ' . date('Y-m-d')));
var_dump($log);
$log->detach($f);
$log->detach($e);
var_dump($log);
var_dump($f, $e);
- Observer
- observer
- Observer
- Observer
- Observer
- Observer
- Observer
- Observer
- Observer
- observer
- observer
- Observer
- observer
- Observer
- observer
- observer
- Observer
- Observer
- Decorator
- 如何最简单地在mac pro双系统(mac+xp)下重装windows
- Factory
- linux c 简单的ls程序编写 学习笔记
- js RegExp用法
- Observer
- 线程和优先级总结
- Proxy
- 关于齐次坐标的理解
- PHP异步执行的常用方式
- 线程优先级
- PHP函数:fsockopen简介
- jQuery学习(二)--各种选择器说明
- strategy