php设计模式(3)-观察者模式

本文通过实例展示了观察者模式在PHP中的实现,重点介绍了如何利用PHP的SplSubject和SplObserver类来创建一个简单的登录系统,实现了用户登录时通知安全模块和广告模块的功能。

<?php

class User implements SplSubject{
public $loginNum;
public $hobby;
public $observers = null;

public function __construct($hobby){
$this->loginNum = rand(1,10);
$this->hobby = $hobby;
$this->observers = new SplObjectStorage();
}
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();
}
}
public function login(){
$this->notify();
}

}

class Secrity implements SplObserver{
public function update(SplSubject $subject){
echo "第".$subject->loginNum."次登陆";
}
}

class Ad implements SplObserver{
public function update(SplSubject $subject){
echo "爱好".$subject->hobby;
}
}

$user = new User("篮球");
$user->attach(new Secrity());
$user->attach(new Ad());
$user->login();

 

 

 

下面通过观察者模式实现登陆

index.php

<html>
<head></head>
<body>
<form action="main.php" method="post">
姓名:<input type="text" name="name"/><br/>
密码:<input type="password" name="password"/>
<input type="submit" value="登陆"/>
</form>

</body>
</html>

 

main.php

<?php

class User implements SplSubject{
public $name;
public $password;
public $observers = null;

public function __construct($name,$password){
$this->name = $name;
$this->password = $password;
$this->observers = new SplObjectStorage();
}
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();
}
}
public function login(){
$this->notify();
}

}

class Validate implements SplObserver{
public function update(SplSubject $subject){
if($subject->name=="shenming" && $subject->password=="shenm"){
echo "success";
}else{
echo "false";
}
}
}


$name=$_POST['name'];
$password=$_POST['password'];
$user = new User($name,$password);
$user->attach(new Validate());
$user->login();

转载于:https://www.cnblogs.com/shenming/p/4217002.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值