2010-11-19 7 views
1

이 문제는 주로 C++/C# 프로그래머가 고려하고 있습니다. 나는 내 질문에 대한 간단한 대답을 찾을 수 없었기 때문에 쉽게 사용할 수있는 것이 있다면 사과드립니다. 이것은 매우 일반적인 문제처럼 보입니다.PHP : Require() 및 클래스 계층 구조

클래스 클래스 B에 대한 컨테이너 인이 있다고 가정합니다. 클래스 B은 차례로 클래스 C의 인스턴스에 대한 컨테이너입니다. 컨테이너 란 각 클래스가 특정 종류의 객체 배열과 그 객체를 설명하는 몇 가지 일반 매개 변수를 보유하고 있음을 의미합니다. 각 클래스는 [className] .php에 저장됩니다.

이제 클래스 A의 인스턴스를 작성해야하는 스크립트가 있습니다. 이렇게하려면 클래스 C의 인스턴스를 만들어야합니다. 클래스 B의 인스턴스를 작성하는 데 사용되며, 마지막으로 모든 클래스 Bs가 클래스 A의 인스턴스를 작성하는 데 사용됩니다.

질문은 PHP에서 가장 오류가 발생하기 쉬운) require() 문을 넣을 장소? 몇 가지 아이디어 : 사방

  • 가 필요() 스크립트의 세 가지 클래스, 다른 곳
  • require_once를() 클래스는 당신이 그들을 사용해야합니다. 이 경우 스크립트에서 require_once() A, B 및 C를 사용하고 A에서 B와 C가 필요하며 B에서 require_once() C가 필요합니다.
  • 클래스의 다음 레벨이 계층. 스크립트에는 (A)가 필요하고 A는 (B)가 필요하며 B는 (C)가 필요합니다. 따라서 스크립트에서 A를 요구하면 A를 채우는 데 필요한 모든 클래스에 액세스 할 수 있습니다.
  • 자동 로딩과 같은 다른 작업이 수행됩니다.

언제나처럼, 나는 생각에 감사한다. 이것은 어느 정도 주관적 일지 모르지만 나는 어떤면에서는 다른 사람들보다 객관적으로 더 좋을 수 있다고 생각합니다.

+0

문제를 지나치게 복잡하게 만들지 마십시오. 자동 로딩을 사용하십시오. – stillstanding

답변

1

자동 로딩과 함께 갈 것입니다. require_once() 수업이 자동으로 이루어지는 경우 걱정할 필요가 없습니다. 당신이해야 할 일은 당신이 거기에있을 것으로 예상되는 클래스들을 사용하기 시작하면 PHP가 자동 로더를 호출하여 클래스가로드되었는지 확인하는 것입니다.

각 파일의 맨 위에있는 파일을 가져 오는 환경에서 프로그래밍하는 데 익숙하다면 모든 파일의 맨 위에 require_once()을 사용하는 것이 더 편할 수 있습니다. 각 클래스 종속성이 무엇인지 명확히하기 때문에 자동 로딩보다이 방법을 선호합니다. 그러나, 당신은 당신이 즐길 수없는 많은 중복을 얻습니다.

어느 쪽이든 작동합니다. 대부분 스타일 선택입니다.

+0

이 상황에서 자동 로딩을 사용하는 경우 어디에서 자동로드 기능을 사용합니까? 모든 실행 파일에서 PHP? – Shaun

+0

기본적으로 네, 실제로 "실행 가능한"코드에서 __autoload()가있는 파일 만 필요합니다. 또한 checkout spl_register_autoload() - 좀 더 유연성을 제공 할 것입니다 (성능은 약간 떨어질 수 있음). – NSSec

+0

파일의 'use' 문이 클래스 종속성을 충분히 설명합니까? – Crozin

2

항상 require_once을 사용하여 클래스를 포함하십시오. 항상입니다. 말 그대로 아무런 단점도 없습니다. 그들이 필요로하는 각 파일에 require_once을 통해 파일을 포함 시키십시오. 이것은 실패 할 수 없습니다. require_once을 여러 번 사용할 수 없으며 클래스가 전체 프로그램에 포함되어 사용 가능하다는 보장이 있습니다.

+1

+1하지만 실제로 소스 파일에서 * 사용하는 클래스 만 필요합니다. – cdhowie

+0

실제로 잠재적 인 단점이 있으며 성능이 약간 저하됩니다. 자세한 내용은 http : //www.techyouruniverse를 참조하십시오.com/software/php-performance-tip-require-versus-require_once를 사용하십시오. – NSSec

+1

@MathieuK PHP 최적화를 시도하는 것은 의미가 없습니다. PHP 기반 최적화는 출력 캐싱을 통해 완벽하게 해결됩니다. – meagar