2011-09-25 4 views
1

부모 개체에 속한 개체간에 메서드를 공유하려고합니다.자식 개체간에 메서드 공유

다른 개체를 처리하는 하위 개체가있는 주 개체가 있습니다. 여기

class engine { 

    public function __construct() { 

    $this->db = new db(); 
    $this->url = new url(); 
    $this->template = new template(); 

    } 

} 

내가 내 주요 개체를 사용하는 방법의 예이다 :이 메인 객체 생성자를 사용하여 만들어집니다

$engine = new engine(); 

$engine->db->connect(); 
$engine->url->parse(); 
$engine->template->render(); 

가 어떻게 자식 개체가 다른 아이들의 방법에 액세스 할 수 있습니다 (예 방법 수 있습니다 template->render()url->parse() 전화)?

+3

귀하의 디자인이 고장에서 Url::parse();과 같이 호출. 왜 responsibiliy가 뭔가를 렌더하는 템플릿 객체가 url-> parse를 호출해야합니까? 이에 대한 설명이있는 경우 질문에 대한 대답은 [Dependency Injection]을 사용하는 것입니다 (http://stackoverflow.com/questions/6094744/dependecy-hell-how-does-one-pass-dependencies-to-deeply- 중첩 개체/6095002 # 6095002). – Gordon

+0

그건 내가 줬던 나쁜 예 였어. 제 디자인에서 렌더링 된 템플릿의 선택은 요청 된 URL에 따라 달라질 수 있습니다 (템플릿 정의 내에서 무언가를 재 작성하는 대신 URL 객체를 파싱하고 싶습니다). Dependency Injection은 제가 찾고 있던 것이 었습니다. 감사합니다. –

+1

[SOLID] (https://secure.wikimedia.org/wikipedia/en/wiki/Solid_%28object-oriented_design%29) 및 [GRASP] (https://secure.wikimedia.org/)에 관심이있을 수 있습니다. 위키피디아/en/wiki/GRASP_ % 28 객체 지향 설계 % 29)와 [Demeter의 법칙] (https://secure.wikimedia.org/wikipedia/en/wiki/Law_of_Demeter) 및 [The Clean Code Talks] (http : //www.youtube.com/results?search_query=The+Clean+Code+Talks&aq=f) – Gordon

답변

0

당신은 클래스의 정적 속성을 설정하고 staticaly 호출 할 수 있습니다 :

static public function parse() { 
    <some code> 
} 

$template->render();

+0

OP에서 클래스 기반 프로그래밍 및/또는 애플리케이션을 꽉 조인하여 유지 관리 기능을 중단하는 방법에 대한 정보가 필요하지 않습니다. http를 사용하십시오 : //kore-nordmann.de/blog/0103_static_considered_harmful.html – Gordon

+0

인식하지 못했다면 질문은 "자식 개체가 다른 자식의 메서드에 액세스 할 수있는 방법"입니다. 그래서 이것이 그들이 할 수있는 방법입니다. –

+0

그래, 가능한 한 차선책으로. 이 방법을 사용하면 객체를 모두 도랑 처리하고 절차 적 프로그래밍을 사용할 수 있습니다. – Gordon

관련 문제