2012-09-18 4 views
3

다음 코드를 발견했습니다. 이것은 특정 패턴입니까? 아니면 그런 식으로 코드를 구조화하는 이유가 될 수 있습니까? 아니면 그냥 가짜입니까?왜 __destruct에 논리가 있습니까

class ExportCSV extends Export 
{ 
    // some private and public vars 

    public function __construct($arg) 
    { 
    // [...] 
     new CustomerReport($this); 
    } 

    public function procCallback($proc) 
    { 
     switch($proc){ 
      case "customer": 
       new InvoiceReport($this); 
       break; 
      case "invoice": 
       new PrepaymentReport($this); 
       break; 
      case "prepayment": 
       new RefundReport($this); 
       break; 
      case "refund": 
       $this->sendMail(); 
       break; 
     } 
    } 
} 

class CustomerReport extends Foobar 
{ 
    private $inst; 
    public function __construct($inst) 
    { 
     $this->inst = $inst; 
     $this->exportCustomers($inst->from, $inst->to); 
    } 
    public function __destruct() 
    { 
     $this->inst->procCallback("customer"); 
    } 
} 
+0

'InvoiceReport'에는 무엇이 들어 있습니까? – JamesHalsall

답변

1

나는 소멸자에 표시된 코드 '논리'를 호출 할 것이다 : 실제로 Observer 패턴의 구현입니다.

는 나는 그렇게 작동 여기 가정하십시오 CustomerReport 객체가 생성 될 때 첫째, 생성자가 $inst 분야에서 (아마도 몇 가지 이유가 여기에 표시되지 않은 몸 $this->exportCustomers 방법으로) 일부 관찰 객체를 등록합니다. 그런 다음이 관찰 객체는이 객체의 상태가 변경 될 때마다 통보됩니다. 물론,이 객체의 파괴는 그 상태의 변화라고 볼 수 있습니다.)

0

코드의 원래 부분 개발자가이 라이브러리의 동일한 사람 (- :)이 될 수있는 사용자를 신뢰하지 않을 수 있으며 모든 CustomerReport이 생성되도록 할 수 있습니다 공동 작업자 객체를 호출합니다 (일부 잠금 또는 기타 중요한 리소스를 해제 할 수 있음).

2

raina77ow가 말했듯이 패턴을 구현 한 것입니다. 또한 객체가 파괴되면 무엇을하고 싶은지 고려해야합니다. 당신은 애플리케이션 라이프 사이클이다. 다음 예제를 고려해 보자. (단지 예일 뿐이다!)

MVC 패턴을 구현하려고하고 있고, d "보기 부분"을 만드십시오. 그래서 무엇이 필요합니까? 요청에서 생성 된 모든 변수를 잡아서 응답에서 사용할 준비가되면 (컨트롤러와 모델을 통해) 뷰에 렌더링해야합니다. 하나의 접근법 (물론 다른 것들 중에서도)은 마법 패턴 __destruct()를 통해이 패턴 (Observer)을 구현 한 것입니다. 이 같은 예를 들어 뭔가 :

// your code here 
public function __destruct() { 
    $this->grabAllTheVarsAndRenderThem(); 
    // or you can include the views file 
    extract($this->viewParams); 
    include_once('my_file_view.php'); 
} 

이것은 단지 예이며, (당신이 메서드 이름에서 볼 수 ) BTW, 매우 verbosed된다. 그러나 예제 뒤에있는 아이디어는 객체가 파괴되기 전에 일부 동작을 바인딩합니다..

물론이 패턴을 구현할 수있는 많은 상황이 있습니다. 이것은이 마법 방법을 사용하는 의미를 설명하기위한 예일뿐입니다.

희망이 있습니다.

관련 문제