라이브러리

[PHP] SplSubject::detach - 관찰자 분리




SplSubject 클래스

SplSubject 클래스는 Observer 패턴을 구현하는 데 사용되는 추상 클래스입니다. Observer 패턴은 객체 간의 의존성을 줄이고, 객체가 다른 객체에 의존하지 않도록 하기 위해 사용됩니다.

detach 메서드

detach 메서드는 Observer 패턴에서 사용되는 메서드입니다. detach 메서드는 Observer 객체를 Subject 객체에서 분리합니다. Subject 객체가 Observer 객체를 detach하면, Subject 객체는 Observer 객체에 대한 참조를 삭제하고, Observer 객체는 Subject 객체에 대한 참조를 삭제합니다.

detach 메서드의 사용 예제

#hostingforum.kr
php

class Subject extends SplSubject {

    public function attach(Observer $observer) {

        $this->attach($observer);

    }



    public function detach(Observer $observer) {

        $this->detach($observer);

    }

}



class Observer extends SplObserver {

    public function update(SplSubject $subject) {

        echo "Observer: 업데이트 받음
";

    }

}



$subject = new Subject();

$observer = new Observer();



// Observer 객체를 Subject 객체에 첨부합니다.

$subject->attach($observer);



// Subject 객체가 Observer 객체에 업데이트 합니다.

$subject->notify();



// Observer 객체를 Subject 객체에서 분리합니다.

$subject->detach($observer);



// Subject 객체가 Observer 객체에 업데이트 하지 않습니다.

$subject->notify();



detach 메서드의 사용 예제 (실제 사용 예제)

#hostingforum.kr
php

class User extends SplSubject {

    private $name;



    public function __construct($name) {

        $this->name = $name;

    }



    public function attach(UserObserver $observer) {

        $this->attach($observer);

    }



    public function detach(UserObserver $observer) {

        $this->detach($observer);

    }



    public function update() {

        $this->notify();

    }

}



class UserObserver extends SplObserver {

    public function update(SplSubject $subject) {

        $user = $subject;

        echo "Observer: 사용자 '$user->name'의 상태가 변경되었습니다.
";

    }

}



$user = new User("John");

$observer = new UserObserver();



// 사용자 'John'의 상태가 변경되었습니다.

$user->attach($observer);

$user->update();



// 사용자 'John'의 상태가 변경되지 않습니다.

$user->detach($observer);

$user->update();



이 예제에서는 User 클래스가 Subject 클래스를 상속하고, UserObserver 클래스가 Observer 클래스를 상속합니다. User 클래스는 UserObserver 클래스에 대한 업데이트 메시지를 보냅니다. detach 메서드를 사용하여 UserObserver 클래스를 User 클래스에서 분리하면, User 클래스는 UserObserver 클래스에 대한 업데이트 메시지를 보낼 수 없습니다.
  • profile_image
    나우호스팅 @pcs8404 

    호스팅포럼 화이팅!

    댓글목록

    등록된 댓글이 없습니다.

  • 전체 10,077건 / 204 페이지

검색

게시물 검색