2012-03-30 2 views
1

내가 가지고 있다고하자 : 다음는 "듣기 (? 대기)"방법을 만드는 방법

class X 
{ 
    function a() 
    { 
     echo "Hello, "; 
    } 
    function b() 
    { 
     echo "John!"; 
    } 
} 

Y = new X(); 
Y->a(); 

하지만 방법 A가 호출되면, 나는 또한 B 법을 원하는

그것은 (그래서 가지 (대기?) 순간까지 A가 전화를 완료 수신) 때문에 출력이

Hello, John 

인가입니다 그것을 가능 t 직후라는 그 일을 어떻게해야합니까? 아니, $ this-> b();를 호출한다. 방법의 끝에서 내가 뭘하고 싶은 해결책이 아닙니다 :) 미리 감사드립니다 :)

+0

$ Y-> a() 뒤에 $ Y-> b()를 호출하는 것은 어떻습니까? – aambrozkiewicz

답변

3

observer pattern을 (를) 찾고 있습니까? 인터넷에서 몇 가지 예를 읽고, 시도하고있는 것을 할 수 있어야합니다. 그러나

, 관찰자 ​​패턴을 사용하는 아주 간단한 예 :

class X 
{ 
    private $observer; 
    public function __construct() { 
     $this -> observer = new XObserver(); 
    } 

    function a() { 
     echo "Hello,";  
     $this -> observer -> aExecuted($this); 
    } 

    function b() { 
     echo "John!"; 
    } 
} 

class XObserver { 

    public function aExecuted($obj) { 
     return $obj -> b(); 
    } 
} 
+0

인터넷 검색 중 문제가되는 경우가 종종 있습니다. 감사하겠습니다. –

+0

@ AndriusNaruševičius, 내가 만든 간단한 예제를 확인할 수 있습니다. – Starx

+0

내가 좋아하지 않는 유일한 단점은 $ this -> observer -> aExecuted ($ this); 여전히 메소드에 추가해야합니다. 그걸 막기위한 어떤 방법이라도 그래도 지금처럼 작동하게 만들까요? –

-1

당신이 뭘 하려는지에 더 정교한 수 있습니까? 관찰자 패턴은 외부 객체의 목록을 첨부하고 일종의 이벤트 기반 시스템을 구현하는 것을 제안하기 때문에. 그리고 나는 관찰자 접근법이 당신이 묘사 한 것에서 당신의 필요에 맞는지 확신하지 못합니다.

일단 메소드가 실행 완료되면 다른 메소드를 호출 할 가능성이 없으며 필요하지 않습니다. 반 올바른 접근법은 __call을 사용하여 a() 메소드를 protected/private로 만들고 __call에서 호출을 가로 채고 a() 메소드를 실행 한 다음 b() 메소드를 즉시 실행할 수 있습니다.

불편을 끼쳐 드려 죄송합니다.이 문제를 해결할 더 좋은 방법을 제공하거나 생각할 수 없습니다. 이 목적을위한 php 마법 방법은 없습니다.

+0

만들기/읽기/업데이트/삭제와 같은 몇 가지 방법을 사용한 후에이 함수에 대한 사용자의 액세스 정보를 데이터베이스에 기록해야합니다. 메인 클래스의 일부 자식에게는 이러한 메서드가 다를 수 있으며 각 메서드 후에 데이터베이스 작성기 메서드 줄에 해당 호출을 두는 것을 잊지 않을 때마다. 내 의견으로는 상당히 번거 롭다. –