PHP观察者模式实例分析【对比JS观察者模式】
时间:2022-07-27
本文章向大家介绍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();//登录
- 我也来说说.net开源
- 是时候对员工进行网络安全培训了:黑客正将目标瞄准打印机
- 进度条ProgressBar
- Microsoft Visual Studio International Pack
- 柯洁5冠在手“食言”再战AI:我已看开 输赢无所谓
- JGulp: 利用Gulp 配置的前端项目自动化工作流
- 微软Enterprise Library 4.0将支持依赖注入
- 时钟AnalogClock与DigitalClock
- 细数那些在2017年被黑客滥用的系统管理工具和协议
- Compass: 在你的应用中集成搜索功能
- 列表选择Spinner
- 巧用CSS3 :target 伪类制作Dropdown下拉菜单(无JS)
- 开源的虚拟机软件 VirtualBox v1.5.2
- Farseer:一个用于Silverlight和XNA的开源物理引擎
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- GDCRNATools内置的gdc-client不好用
- 字符编码与字符串表达式
- 关于批次效应矫正后出现负值
- 在SAP WebIDE里使用Fiori Elements快速开发SAP UI5应用
- SAP Fiori Elements里的Smart Table工作原理解析
- SAP Fiori Elements里Smart Link工作原理介绍
- SAP CDS view自学教程之六:如何在CDS view里消费table function
- 如何构建一个100 Gbit(无丢包)连续数据包记录器[Part3]
- 使用SAP CDS view快速创建一个Fiori应用,管理Service Order
- SAP Fiori Elements里Drop down list的实现原理
- SAP CRM销售订单UI上的字段对应的数据库表存储字段:requested start date和end date
- SAP CDS view自学教程之八:SAP Fiori Elements里不同类型的annotation
- SAP CDS view自学教程之五:如何开发支持Odata navigation的CDS view
- SAP Fiori Elements如何基于domain fixed value创建下拉菜单
- SAP WebClient UI配置决定(configuration)的逻辑介绍