내가 작업하고있는 프로젝트에서는 시스템의 모든 곳에서 사용할 수있는 이벤트 관리자 (읽기 전용) 구성 관리자 및 플러그인 관리자를 비롯한 일부 개체가 있어야합니다.PHP에서 어디서나 객체를 사용할 수있는 가장 좋은 방법은 무엇입니까?
"C++ 배경을 가진 사람이"전역 변수가 필요하면 무언가 잘못했을 가능성이 높습니다 "라고 친절하게 지적 할 때까지 전역 변수를 사용하고있었습니다.
그는 그것을 필요로하는 모든 기능에 전달되는 상태 객체를 사용할 것을 제안했습니다.
그래서 내가 그랬어 :
$state = new State();
$state->register('eventManager' , new EventManager());
$state->register('configManager', new ConfigManager());
$state->register('cacheManager' , new CacheManager());
$state->register('pluginManager', new PluginManager());
$state->get('pluginManager')->initialize($state);
좀 더 상태 기반 언어에서이 방법의 혜택을 볼 수 있지만, 그것은 상태가 손실 PHP, 같은 (? 대부분) 상태 비 언어 나에게 가지 무의미한 것 같다 페이지로드가 완료되면
상태 개체를 PHP와 같은 (대부분) 상태 비 저장 언어로 전달하면 어떤 이점이 있습니까?이 방법은 다른 접근 방식 (즉, 전역 기반 시스템)보다 이점을 갖고 있으며 더 좋은 방법이 있습니까? 이 작업을 수행하는
많은 좋은 질문들은 전문적인 경험을 토대로 어느 정도의 의견을 제시하지만,이 질문에 대한 대답은 사실, 참고 문헌 또는 특정 전문 지식보다는 의견을 기반으로하는 경향이 있습니다. 일반적으로 문제를 해결하기위한 개발 포럼 (예 : [quora] (http://www.quora.com/Computer-Programming))을 찾고 싶을 수 있습니다. 그런 다음/특정 코딩 문제가있는 경우 StackOverflow로 돌아와서 도와 드리겠습니다. –
당신이 원하는 것은 * dependency injection *이고, 당신의 "state object"는 여기 의존성 주입 컨테이너에서의 첫번째 찌르기 같은 것이다. 여기에 상태가 있는지 여부에 관계없이 모든 것이 코드 관리 *에 관한 것입니다. 그리고 그것은 모든 언어에서 유용합니다. – deceze
또한 PHP는 "stateless"가 아닙니다. 웹 서버에서 주로 stateless 요청을 처리하는 데 사용됩니다. 대신 매우 "상태있는"방법으로 쉽게 사용할 수 있습니다. – deceze