以下示例演示用户登录成功后给用户发送一条短信
<?php
class Login{
public static function actlogin(){
$loginModel = new loginModel;
$loginModel->username = "18822805297";
$loginModel->password = "123456";
if($loginModel->add($loginModel)){
$observer = new container($loginModel);
$observer->attach(new SmsAction());
$observer->notify();
}
}
}
/**
* Class loginModel
* 登录模型
*/
class loginModel{
private $username = "";
private $password = "";
//设置登录属性
public function __set($key,$val)
{
if (isset($this->$key)) {
$this->$key = $val;
}
}
//获取登录属性
public function __get($attribute)
{
if(isset($this->$attribute)){
return $this->$attribute;
}else
return "";
}
public function add($model){
return true;
}
}
class container implements SplSubject{
public $observerObj = "";
public $observers = "";
public function __construct($obseverObj)
{
$this->observers = new SplObjectStorage();
$this->observerObj = $obseverObj;
}
/**
* @param SplObserver $observer
* 绑定观察者
*/
public function attach(SplObserver $observer)
{
// TODO: Implement attach() method.
$this->observers->attach($observer);
}
/**
* @param SplObserver $observer
* 解绑一个观察者
*/
public function detach(SplObserver $observer)
{
// TODO: Implement detach() method.
$this->observers->detach($observer);
}
/**
* 通知所有的观察者
*/
public function notify()
{
// TODO: Implement notify() method.
foreach($this->observers as $obj){
$obj->update($this);
}
}
//获取被观察者
public function getObser(){
return $this->observerObj;
}
}
class SmsAction implements SplObserver{
public function update(SplSubject $obj){
$model = $obj->getObser();
print_r("用户 $model->username 短信验证码已发送");
}
}
Login::actlogin();