{"id":564,"title":"php\u8bbe\u8ba1\u6a21\u5f0f-\u89c2\u5bdf\u8005\u6a21\u5f0f\u53ca\u5e94\u7528\u573a\u666f\u4e3e\u4f8b","good":0,"bad":0,"hit":1078,"created_at":"2023-01-19 03:53:54","content":"
<?php<\/p>
\/**<\/p>
* php\u89c2\u5bdf\u8005\u6a21\u5f0f,\u4f30\u8ba1\u73b0\u5728\u6d41\u884c\u7684\u6846\u67b6\u4e2d\u7684event\u673a\u5236\u5e94\u8be5\u5c31\u662f\u7528\u7684\u89c2\u5bdf\u8005\u6a21\u5f0f\u5b9e\u73b0\u7684<\/p>
* \u5e94\u7528\u573a\u666f\u4e3e\u4f8b\uff1a<\/p>
* 1\u3001\u7f51\u9875\u4e2d\u6839\u636e\u7528\u6237\u9009\u62e9\u7684\u6027\u522b\u663e\u793a\u4e0d\u540c\u98ce\u683c\uff08\u88d9\u5b50\u3001\u897f\u670d\uff09<\/p>
* 2\u3001\u6839\u636e\u7528\u6237\u767b\u5f55\u6b21\u6570\u53ca\u7231\u597d\u505a\u5b89\u5168\u5904\u7406\u53ca\u5c55\u793a\u5e7f\u544a<\/p>
* observer:\u89c2\u5bdf\u8005<\/p>
* subject:\u88ab\u89c2\u5bdf\u8005<\/p>
* SplObserver\u3001SplSubject\u662f\u7cfb\u7edf\u81ea\u5e26\u7684\u63a5\u53e3<\/p>
*\/<\/p>
<\/p>
class user implements SplSubject<\/p>
{<\/p>
public $logNum;\/\/\u7b2c\u51e0\u6b21\u767b\u5f55<\/p>
public $hobby;\/\/\u7231\u597d<\/p>
protected $observers = null;<\/p>
<\/p>
public function __construct($hobby)<\/p>
{<\/p>
$this->logNum = rand(1, 10);<\/p>
$this->hobby = $hobby;<\/p>
$this->observers = new SplObjectStorage();<\/p>
}<\/p>
<\/p>
public function login()<\/p>
{<\/p>
\/\/\u767b\u5f55\u903b\u8f91\u7565<\/p>
\/\/\u901a\u77e5\u89c2\u5bdf\u8005\uff0c\u672c\u4f8b\u4e2d\u662f\u6307security\u53caad<\/p>
$this->notify();<\/p>
}<\/p>
<\/p>
\/**<\/p>
* \u6dfb\u52a0\u89c2\u5bdf\u8005<\/p>
* @param SplObserver $observer<\/p>
*\/<\/p>
public function attach(SplObserver $observer)<\/p>
{<\/p>
$this->observers->attach($observer);<\/p>
}<\/p>
<\/p>
\/**<\/p>
* \u5220\u9664\u89c2\u5bdf\u8005<\/p>
* @param SplObserver $observer<\/p>
*\/<\/p>
public function detach(SplObserver $observer)<\/p>
{<\/p>
$this->observers->detach($observer);<\/p>
}<\/p>
<\/p>
\/**<\/p>
* \u901a\u77e5\u6240\u6709\u89c2\u5bdf\u8005<\/p>
*\/<\/p>
public function notify()<\/p>
{<\/p>
$this->observers->rewind();<\/p>
while ($this->observers->valid()) {<\/p>
$observer = $this->observers->current();<\/p>
$observer->update($this);\/\/$this\u88ab\u89c2\u5bdf\u8005:user()<\/p>
$this->observers->next();<\/p>
}<\/p>
}<\/p>
}<\/p>
<\/p>
class security implements SplObserver<\/p>
{<\/p>
public function update(SplSubject $subject)<\/p>
{<\/p>
if ($subject->logNum < 3) {<\/p>
echo "\u8fd9\u662f\u7b2c{$subject->logNum}\u6b21\u5b89\u5168\u767b\u5f55<br\/>";<\/p>
} else {<\/p>
echo "\u8fd9\u662f\u7b2c{$subject->logNum}\u6b21\u5b89\u5168\uff0c\u5f02\u5e38<br\/>";<\/p>
}<\/p>
}<\/p>
}<\/p>
<\/p>
class ad implements SplObserver<\/p>
{<\/p>
public function update(SplSubject $subject)<\/p>
{<\/p>
if ($subject->hobby == 'sports') {<\/p>
echo "\u53bb\u6253\u7403<br\/>";<\/p>
} else {<\/p>
echo "\u5b66\u4e60http:\/\/www.hu-rong.com<\/a><br\/>";<\/p> }<\/p> }<\/p> }<\/p> \/\/\u5b9e\u65bd\u89c2\u5bdf<\/p> $user = new user('sports');<\/p> $user->attach(new security());<\/p> $user->attach(new ad());<\/p> $user->login();<\/p> \/\/\u8fd0\u884c\u7ed3\u679c\uff1a<\/p> \u8fd9\u662f\u7b2c2\u6b21\u5b89\u5168\u767b\u5f55<\/span> \/\/\u5b9e\u65bd\u89c2\u5bdf<\/p> $user = new user('study');<\/p> $user->attach(new security());<\/p> $user->attach(new ad());<\/p> $user->login();<\/p> \/\/\u8fd0\u884c\u7ed3\u679c\uff1a<\/p> \u8fd9\u662f\u7b2c5\u6b21\u5b89\u5168\uff0c\u5f02\u5e38<\/span>
<\/p>
<\/p>
\u53bb\u6253\u7403<\/span><\/p>
<\/span><\/p>
<\/p>
<\/p>
\u5b66\u4e60http:\/\/www.hu-rong.com<\/a><\/span><\/p>
<\/p>"}