{"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>

<\/p>

\/\/\u5b9e\u65bd\u89c2\u5bdf<\/p>

$user = new user('sports');<\/p>

$user->attach(new security());<\/p>

$user->attach(new ad());<\/p>

$user->login();<\/p>

<\/p>

\/\/\u8fd0\u884c\u7ed3\u679c\uff1a<\/p>

\u8fd9\u662f\u7b2c2\u6b21\u5b89\u5168\u767b\u5f55<\/span>\u53bb\u6253\u7403<\/span><\/p>

<\/span><\/p>

<\/p>

\/\/\u5b9e\u65bd\u89c2\u5bdf<\/p>

$user = new user('study');<\/p>

$user->attach(new security());<\/p>

$user->attach(new ad());<\/p>

$user->login();<\/p>

<\/p>

\/\/\u8fd0\u884c\u7ed3\u679c\uff1a<\/p>

\u8fd9\u662f\u7b2c5\u6b21\u5b89\u5168\uff0c\u5f02\u5e38<\/span>\u5b66\u4e60http:\/\/www.hu-rong.com<\/a><\/span><\/p>

<\/p>"}