• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    PHP观察者模式实例分析【对比JS观察者模式】

    本文实例讲述了PHP观察者模式。分享给大家供大家参考,具体如下:

    1.用js实现观察者模式

    !DOCTYPE html>
    html>
    head>
        title>/title>
        style type="text/css">
        div{width: 100px;height: 100px;border: 1px #999 solid;margin-bottom: 5px;}
        /style>
    /head>
    body>
    !--
    我们让div对象观察select的变化,selecte变化就会通知这个2个对象,并引起这2个对象的变化,实现观察者模式。
     -->
     h1>用观察者模式切换页面风格/h1>
     select>
         option value="male">男式风格/option>
         option value="female">女士风格/option>
     /select>
     button onclick="t1()">观察学习区/button>
     button onclick="t2()">不观察学习区/button>
     div id="content">我是内容/div>
     div id="ad">我是广告/div>
     div id="study">学习/div>
    /body>
    script type="text/javascript">
        var sel = document.getElementsByTagName('select')[0];
        sel.observers = {};
        sel.attach = function(key,obj){
            this.observers[key] = obj;
        }
        sel.detach = function(key){
            delete this.observers[key];
        }
        sel.onchange = sel.notify = function(){
            for(var key in this.observers){
                this.observers[key].update(this);
            }
        }
        //客户端
        var content = document.getElementById('content');
        var ad = document.getElementById('ad');
        content.update = function(ob){
            if (ob.value == 'male') {
                this.style.backgroundColor = 'gray';
            }else if(ob.value == 'female'){
                this.style.backgroundColor = 'pink';
            }
        }
        ad.update = function(ob){
            if (ob.value == 'male') {
                this.innerHTML = '汽车';
            }else if(ob.value == 'female'){
                this.innerHTML = '减肥';
            }
        }
        //让content观察select的变化
        sel.attach('content',content);
        sel.attach('ad',ad);
        //新增监听study区
        var study = document.getElementById('study');
        study.update = function(ob){
            if (ob.value == 'male') {
                this.innerHTML = '学习计算机';
            }else if(ob.value == 'female'){
                this.innerHTML = '学习美容';
            }
        }
        sel.attach('study',study);
        function t1(){
            sel.attach('study',study);
        }
        function t2(){
            sel.detach('study');
        }
    /script>
    /html>
    
    

    2.用php实现观察模式

    ?php
    //php实现观察者
    //php5中提供观察者observer和被观察者subject的接口
    class User implements SplSubject
    {
        public $lognum;
        public $hobby;
        protected $observers = null;
        public function __construct($hobby)
        {
            $this->lognum = rand(1,10);
            $this->hobby = $hobby;
            $this->observers = new SplObjectStorage();
        }
        public function login()
        {
            //操作session等
            $this->notify();
        }
        public function attach(SPLObserver $observer)
        {
            $this->observers->attach($observer);
        }
        public function detach(SPLObserver $observer)
        {
            $this->observers->detach($observer);
        }
        public function notify()
        {
            $this->observers->rewind();
            while ($this->observers->valid()) {
                $observer = $this->observers->current();
                $observer->update($this);
                $this->observers->next();
            }
        }
    }
    //用户安全登录模块
    class Safe implements SPLObserver
    {
        public function update(SplSubject $subject)
        {
            if ($subject->lognum  3) {
                echo '这是第' . $subject->lognum . '次安全登录br>';
            }else{
                echo '这是第' . $subject->lognum . '次登录,异常br>';
            }
        }
    }
    //广告模块
    class Ad implements SPLObserver
    {
        public function update(SplSubject $subject)
        {
            if ($subject->hobby == 'sports') {
                echo '英超开始啦br>';
            }else{
                echo '好好学习br>';
            }
        }
    }
    //实施观察
    // $user = new User('sports');
    $user = new User('study');
    $user->attach(new Safe());
    $user->attach(new Ad());
    $user->login();//登录
    
    

    更多关于PHP相关内容感兴趣的读者可查看本站专题:《php面向对象程序设计入门教程》、《PHP数组(Array)操作技巧大全》、《PHP基本语法入门教程》、《PHP运算与运算符用法总结》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

    希望本文所述对大家PHP程序设计有所帮助。

    您可能感兴趣的文章:
    • PHP设计模式之观察者模式入门与应用案例详解
    • PHP 观察者模式深入理解与应用分析
    • php模式设计之观察者模式应用实例分析
    • PHP使用观察者模式处理异常信息的方法详解
    • php设计模式之观察者模式定义与用法经典示例
    • PHP中常用的三种设计模式详解【单例模式、工厂模式、观察者模式】
    • PHP设计模式之观察者模式定义与用法分析
    • PHP观察者模式定义与用法实例分析
    • 解析PHP观察者模式Observer
    上一篇:PHP单例模式实例分析【防继承,防克隆操作】
    下一篇:PHP文件上传小程序 适合初学者学习!
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯

    时间:9:00-21:00 (节假日不休)

    地址:江苏信息产业基地11号楼四层

    《增值电信业务经营许可证》 苏B2-20120278

    PHP观察者模式实例分析【对比JS观察者模式】 PHP,观察者,模式,实例分析,