2011-03-13 6 views
1

그래서 Page 객체를 인스턴스화하는 핵심 프로그램 클래스가 있다고 가정 해 보겠습니다.클래스를 통한 변수 액세스

Page 개체의 속성은 $id (현재 사용중인 페이지의 페이지 ID)입니다.

Page 클래스에서 데이터베이스를 검색하고 Template 개체를 인스턴스화하여 페이지 서식 파일을 설정합니다.

Template 개체에 콘텐츠 블록을 넣고 싶습니다. 이것은 Template 클래스에서 내가 속한 Content 클래스에 의해 처리됩니다.

이제이 콘텐츠가 제대로 작동하려면 프로그램 코어가 소유 한 Page 개체에서 $id을 얻을 수 있어야합니다. 이 일을 할 수있는 방법이 있습니까? 페이지 ID를 통과하기가 다소 어려워 보입니다. 특히 클래스 사이에 레이어가 10 개있을 수 있습니다.

$ id 변수를 정적 (static $id;)으로 만들면 설정 한 객체의 실제 인스턴스에 액세스하는 대신 Page::$id을 사용하여 다시 가져올 수 있습니까?

당신에게

답변

2

감사 당신은 종종 "dependency injection"에 의해 처리 된 후입니다. 템플릿 생성자에서 Template 개체를 만들 때 Page 개체와 같은 개체를 전달하는 것이 일반적입니다. Page 객체 자체는 Template의 속성이거나 $ id 속성 일 수 있습니다. 따라서 모든 함수 호출시 id를 전달할 필요는 없습니다. 템플릿 클래스는 Page 클래스를 관련

Template::__construct($Page)

경우 해당 속성이 protected 또는 public 있다면 그것은 이미 Page::$id에 액세스 할 것이다된다, 또한, 페이지 클래스를 확장 할 수 있습니다.

+0

최고의 PHP DI 라이브러리는 Symfony의 http://components.symfony-project.org/dependency-injection/ – Andy

+0

입니다. 아, 템플릿은 페이지의 일부이므로이 점과 관련이 없습니다. 그래서, 그것을 사용할 필요가있을 때까지 생성자를 통해 $ page 객체를 전달하는 경우가 있습니까? 가끔씩 (내가 현재) 몇 가지 객체를 만드는 핵심 요소에서 세션 및 권한을 처리하는 User 객체와 위에서 언급 한 Page 객체를 말할 수 있습니다. 그런 다음 사용자 객체의 일부를 사용하려면 내 $ user 객체를 내 Page 클래스에 전달해야하고 내 다른 $ 객체 객체와 $ $ page 객체를 다른 모든 클래스에 전달해야 내가 다른 곳에서 사용하고 싶을 때까지 만들 수 있습니다 줄을 내려? –

+0

매우 복잡한 프로그램은 어떻게됩니까? 속성, 메소드를 공유해야하지만 서로 독립적 인 10, 20, 100, 1000 가지의 서로 다른 객체가있는 곳은 어디입니까? 모든 의존성 주입을 추적하는 것이 꽤 복잡해지지 않을까요? –