PHP设计模式之观察者模式定义与用法示例
本文实例讲述了PHP设计模式之观察者模式定义与用法。分享给大家供大家参考,具体如下:
observers=array();
}
/**
*@paramObserver$observer
*@authorjichao.wang
*attachaobserver
*/
functionattach(Observer$observer)
{
$this->observers[]=$observer;
}
/**
*@paramObserver$observer
*@authorjichao.wang
*detachaobserver
*/
functiondetach(Observer$observer)
{
$newObservers=array();
foreach($this->observersas$key=>$obs){
if($obs!==$observer){
$newObservers[]=$obs;
}
}
$this->observers=$newObservers;
}
/**
*@authorjichao.wang
*handleobservernotify
*/
functionnotify()
{
foreach($this->observersas$obs){
$obs->update($this);
}
}
/**
*@authorjichao.wang
*执行登陆
*/
functionhandleLogin()
{
$ip=rand(1,100);
switch(rand(1,3)){
case1:
$this->setStatus(self::LOGIN_ACCESS,$ip);
$ret=true;
break;
case2:
$this->setStatus(self::LOGIN_WRONG_PASS,$ip);
$ret=false;
break;
case3:
$this->setStatus(self::LOGIN_USER_UNKNOWN,$ip);
$ret=false;
break;
}
/**
*handleevent
*/
$this->notify();
return$ret;
}
/**
*@param$status
*@authorjichao.wang
*setloginstatus
*/
functionsetStatus($status,$ip)
{
$this->status=$status;
$this->ip=$ip;
}
/**
*@returnmixed
*@authorjichao.wang
*getloginstatus
*/
functiongetStatus()
{
return$this->status;
}
}
/**
*InterfaceObserver
*@authorjichao.wang
*/
interfaceObserver{
functionupdate(Observable$observable);
}
/**
*ClassEmailObserver
*@authorjichao.wang
*/
classEmailObserverimplementsObserver{
functionupdate(Observable$observable){
$status=$observable->getStatus();
if($status==Login::LOGIN_ACCESS){
//$this->sendMail('用户ip:'.$observable->ip.'登陆成功!');
echo__CLASS__.'用户ip:'.$observable->ip.'登陆成功!'.'------------------';
}
if($status==Login::LOGIN_WRONG_PASS){
//$this->sendMail('用户ip:'.$observable->ip.'登陆失败,密码错误!');
echo__CLASS__.'用户ip:'.$observable->ip.'登陆失败,密码错误!'.'------------------';
}
if($status==Login::LOGIN_USER_UNKNOWN){
//$this->sendMail('用户ip:'.$observable->ip.'登陆失败,无此用户!');
echo__CLASS__.'用户ip:'.$observable->ip.'登陆失败,无此用户!'.'------------------';
}
}
}
/**
*ClassPhoneObserver
*@authorjichao.wang
*/
classPhoneObserverimplementsObserver{
functionupdate(Observable$observable){
$status=$observable->getStatus();
if($status==Login::LOGIN_ACCESS){
//$this->sendMail('用户ip:'.$observable->ip.'登陆成功!');
echo__CLASS__.'用户ip:'.$observable->ip.'登陆成功!'.'------------------';
}
if($status==Login::LOGIN_WRONG_PASS){
//$this->sendMail('用户ip:'.$observable->ip.'登陆失败,密码错误!');
echo__CLASS__.'用户ip:'.$observable->ip.'登陆失败,密码错误!'.'------------------';
}
if($status==Login::LOGIN_USER_UNKNOWN){
//$this->sendMail('用户ip:'.$observable->ip.'登陆失败,无此用户!');
echo__CLASS__.'用户ip:'.$observable->ip.'登陆失败,无此用户!'.'------------------';
}
}
}
classAbcObserverimplementsObserver{
functionupdate(Observable$observable){
$status=$observable->getStatus();
if($status==Login::LOGIN_ACCESS){
//$this->sendMail('用户ip:'.$observable->ip.'登陆成功!');
echo__CLASS__.'用户ip:'.$observable->ip.'登陆成功!'.'------------------';
}
if($status==Login::LOGIN_WRONG_PASS){
//$this->sendMail('用户ip:'.$observable->ip.'登陆失败,密码错误!');
echo__CLASS__.'用户ip:'.$observable->ip.'登陆失败,密码错误!'.'------------------';
}
if($status==Login::LOGIN_USER_UNKNOWN){
//$this->sendMail('用户ip:'.$observable->ip.'登陆失败,无此用户!');
echo__CLASS__.'用户ip:'.$observable->ip.'登陆失败,无此用户!'.'------------------';
}
}
}
//实例化登陆信息
$login=newLogin();
//实现发邮件观察者
$login->attach(newEmailObserver());
//实现发验证码观察者
$login->attach(newPhoneObserver());
//实现其他观察者
$login->attach(newAbcObserver());
//开始登陆
$login->handleLogin();
?>
运行结果:
EmailObserver用户ip:41登陆失败,无此用户!------------------PhoneObserver用户ip:41登陆失败,无此用户!------------------AbcObserver用户ip:41登陆失败,无此用户!------------------
更多关于PHP相关内容感兴趣的读者可查看本站专题:《php面向对象程序设计入门教程》、《PHP数组(Array)操作技巧大全》、《PHP基本语法入门教程》、《PHP运算与运算符用法总结》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。