PHP使用标准库spl实现的观察者模式示例
本文实例讲述了PHP使用标准库spl实现的观察者模式。分享给大家供大家参考,具体如下:
前面使用纯php实现了一个观察者模式(php观察者模式),现在使用php标准库spl在次实现观察者模式,好处是:随意的生成您想使用的观察者!
storage=newSplObjectStorage();
}
functionattach(SplObserver$observer){
$this->storage->attach($observer);
}
functiondetach(SplObserver$observer){
$this->storage->detach($observer);
}
functionnotify(){
foreach($this->storageas$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;
}
}
/**
*只针对登陆的贯观察者
*ClassLoginObserver
*/
abstractclassLoginObserverimplementsSplObserver{
private$login;
function__construct(Login$login){
$this->login=$login;
$login->attach($this);
}
/**
*对外统一的访问点
*@paramSplSubject$subject
*/
functionupdate(SplSubject$subject){
if($subject===$this->login){
$this->doUpdate($subject);
}
}
abstractfunctiondoUpdate(Login$login);
}
/**
*ClassEmailObserver
*/
classEmailObserverextendsLoginObserver{
//不同功能的观察者实现不同的功能
functiondoUpdate(Login$login){
$status=$login->getStatus();
if($status==Login::LOGIN_ACCESS){
//$this->sendMail('用户ip:'.$observable->ip.'登陆成功!');
echo__CLASS__.'用户ip:'.$login->ip.'登陆成功!'.'------------------';
}
if($status==Login::LOGIN_WRONG_PASS){
//$this->sendMail('用户ip:'.$observable->ip.'登陆失败,密码错误!');
echo__CLASS__.'用户ip:'.$login->ip.'登陆失败,密码错误!'.'------------------';
}
if($status==Login::LOGIN_USER_UNKNOWN){
//$this->sendMail('用户ip:'.$observable->ip.'登陆失败,无此用户!');
echo__CLASS__.'用户ip:'.$login->ip.'登陆失败,无此用户!'.'------------------';
}
}
}
//实例化登陆信息
$login=newLogin();
//实现发邮件观察者
newEmailObserver($login);
//开始登陆
$login->handleLogin();
运行结果:
EmailObserver用户ip:77登陆成功!------------------
更多关于PHP相关内容感兴趣的读者可查看本站专题:《php面向对象程序设计入门教程》、《PHP数组(Array)操作技巧大全》、《PHP基本语法入门教程》、《PHP运算与运算符用法总结》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。