PHP觀察者模式定義與用法實(shí)例分析
本文實(shí)例講述了PHP觀察者模式定義與用法。分享給大家供大家參考,具體如下:
我理解的觀察者模式就是,當(dāng)我們觸發(fā)一個(gè)事件的時(shí)候,想要把這個(gè)操作告訴給我想要告訴的對(duì)象,讓他們都執(zhí)行這個(gè)操作,就是將他們綁定到這個(gè)事件下。
1.定義一個(gè)基類(用于添加觀察者也就是我想要通知的對(duì)象,還有通知觀察者)
EventGenerator.php
<?php
abstract class EventGenerator
{
//存儲(chǔ)觀察者,因?yàn)榭梢杂卸鄠€(gè)要通知的對(duì)象,所以是一個(gè)數(shù)組
private $observers = array();
//添加觀察者,也就是我想要通知的對(duì)象
public function addObserver($observer)
{
$this->observers[] = $observer;
}
//通知觀察者
public function notify()
{
//取出所有的對(duì)象去執(zhí)行操作
foreach($this->observers as $observer)
{
//這里我寫一個(gè)update方法,這里就要求我所有的通知對(duì)象必須要有update操作,所以一會(huì)我會(huì)定義一個(gè)借口,讓所有的觀察者強(qiáng)制實(shí)現(xiàn)這個(gè)方法
$observer->update();
}
}
}
?>
定義接口文件,讓所有觀察者實(shí)現(xiàn)update方法Observer.php
<?php
interface Observer
{
function update();
}
?>
定義實(shí)現(xiàn)觀察者模式的文件Event.php
<?php
header('Content-Type:text/html;charset=utf-8');
define('BASEDIR', __DIR___);
require 'Config.php';
spl_autoload_register('Config::autoload');
//定義事件類繼承基類
class Event extends EventGenerator
{
//當(dāng)觸發(fā)這個(gè)事件的時(shí)候通知所有的觀察者
public function trigger()
{
echo '我要開(kāi)始更新了??!<br/>\n';
//基類的通知方法
$this->notify();
}
}
//添加觀察者1
class Observer1 implements Observer
{
public function update()
{
echo '我是觀察者1,我收到你的通知了!我要干我該干的了!<br/>\n';
}
}
//添加觀察者2
class Observer2 implements Observer
{
public function update()
{
echo '我是觀察者2,我收到你的通知了!我要干我該干的了!<br/>\n';
}
}
//下面就要開(kāi)始測(cè)試了!
$event = new Event();
//添加觀察者到這個(gè)事件里
$event->addObserver(new Observer1);
$event->addObserver(new Observer2);
//執(zhí)行trigger操作
$event->trigger();
//這時(shí)候就會(huì)顯示!
//我要開(kāi)始更新了??!
//我是觀察者1,我收到你的通知了!我要干我該干的了!
//我是觀察者2,我收到你的通知了!我要干我該干的了!
?>
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《php面向?qū)ο蟪绦蛟O(shè)計(jì)入門教程》、《PHP數(shù)組(Array)操作技巧大全》、《PHP基本語(yǔ)法入門教程》、《PHP運(yùn)算與運(yùn)算符用法總結(jié)》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫(kù)操作入門教程》及《php常見(jiàn)數(shù)據(jù)庫(kù)操作技巧匯總》
希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。
相關(guān)文章
thinkphp中的多表關(guān)聯(lián)查詢的實(shí)例詳解
這篇文章主要介紹了thinkphp中的多表關(guān)聯(lián)查詢的實(shí)例詳解的相關(guān)資料,希望通過(guò)本文能幫助到大家,讓大家理解掌握這部分內(nèi)容,需要的朋友可以參考下2017-10-10
用PHP程序?qū)崿F(xiàn)支持頁(yè)面后退的兩種方法
在開(kāi)發(fā)過(guò)程中,往往因?yàn)楸韱纬鲥e(cuò)而返回頁(yè)面的時(shí)候填寫的信息都不見(jiàn)了,為了支持頁(yè)面回跳,可以通過(guò)兩種方法實(shí)現(xiàn)。2008-06-06
在VSCode中配置PHP開(kāi)發(fā)環(huán)境的實(shí)戰(zhàn)步驟
最近要寫一些可視化的網(wǎng)站,所以先把需要的環(huán)境配好吧,下面這篇文章主要給大家介紹了關(guān)于在VSCode中配置PHP開(kāi)發(fā)環(huán)境的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下2022-11-11
Zend Framework上傳文件重命名的實(shí)現(xiàn)方法
這篇文章主要介紹了Zend Framework上傳文件重命名的實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了Zend Framework上傳文件重命名的具體操作步驟與配置、檢測(cè)、重命名操作的相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2016-11-11
php利用smtp類實(shí)現(xiàn)電子郵件發(fā)送
這篇文章主要介紹了php利用smtp類輕松實(shí)現(xiàn)發(fā)送電子郵件,smtp類發(fā)送郵件的方法其實(shí)很簡(jiǎn)單,需要的朋友可以參考下2015-10-10
php數(shù)據(jù)庫(kù)操作model類(使用__call方法)
這篇文章主要介紹了php數(shù)據(jù)庫(kù)操作model類,使用__call方法實(shí)現(xiàn)了數(shù)據(jù)的查詢功能,需要的朋友可以參考下2016-11-11
PHP 日期時(shí)間函數(shù)的高級(jí)應(yīng)用技巧
PHP 日期時(shí)間函數(shù)常用函數(shù)高級(jí)使用技巧,大家在以后的開(kāi)發(fā)中能用的到。2009-10-10

