Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 3b8b0de

Browse files
committed
Observer
1 parent 3a74e9f commit 3b8b0de

File tree

2 files changed

+124
-0
lines changed

2 files changed

+124
-0
lines changed

‎Observer/index.php

Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
<?php
2+
3+
/**
4+
* Design pattern "Observer" (Behavioral)
5+
* This is demo code
6+
* See for details: http://maxsite.org/page/php-patterns
7+
*/
8+
9+
/**
10+
* Observable use standart interface SplSubject
11+
*/
12+
class Observable implements \SplSubject
13+
{
14+
/**
15+
* list of observers
16+
*/
17+
private $observers;
18+
19+
/**
20+
* create standart class SplObjectStorage
21+
*/
22+
function __construct()
23+
{
24+
$this->observers = new SplObjectStorage();
25+
}
26+
27+
/**
28+
* standart method of SplObjectStorage
29+
*/
30+
function attach(SplObserver $observer)
31+
{
32+
$this->observers->attach($observer);
33+
}
34+
35+
/**
36+
* standart method of SplObjectStorage
37+
*/
38+
function detach(SplObserver $observer)
39+
{
40+
$this->observers->detach($observer);
41+
}
42+
43+
/**
44+
* send notify
45+
*/
46+
function notify()
47+
{
48+
foreach ($this->observers as $obj) {
49+
$obj->update($this);
50+
}
51+
}
52+
}
53+
54+
/**
55+
* Observer use standart interface SplObserver
56+
*/
57+
class Observer1 implements \SplObserver
58+
{
59+
/**
60+
* get notify from Observable
61+
*/
62+
function update(SplSubject $subject)
63+
{
64+
echo 'update Observer1<br>';
65+
}
66+
}
67+
68+
/**
69+
* another class for Observer
70+
*/
71+
class Observer2 implements \SplObserver
72+
{
73+
function update(SplSubject $subject)
74+
{
75+
echo 'update Observer2<br>';
76+
}
77+
}
78+
79+
/**
80+
* demo
81+
*/
82+
83+
/**
84+
* create Observable
85+
*/
86+
$observable = new Observable();
87+
88+
/**
89+
* create Observers
90+
*/
91+
$o1 = new Observer1();
92+
$o2 = new Observer2();
93+
94+
/**
95+
* attach Observers to Observable
96+
*/
97+
$observable->attach($o1);
98+
$observable->attach($o2);
99+
100+
/**
101+
* send notify
102+
*/
103+
$observable->notify();
104+
/*
105+
update Observer1
106+
update Observer2
107+
*/
108+
109+
/**
110+
* exclude Observer1
111+
*/
112+
$observable->detach($o1);
113+
114+
/**
115+
* send notify
116+
*/
117+
$observable->notify();
118+
/*
119+
update Observer2
120+
*/
121+
122+
123+
# end of file

‎README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ See details on http://maxsite.org/page/php-patterns
1313
* "Builder" (Creational)
1414
* "Strategy" (Behavioral)
1515
* "Adapter" (Structural)
16+
* "Observer" (Behavioral)
1617

1718

1819
(c) MaxSite.org, 2019, http://maxsite.org/

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /