2010-01-22 4 views
0

안녕하세요, 스웨덴 사람과 인사!상속에 따라 파일을 포함하십시오.

여기에 정말 까다로운 문제가 있습니다. 내가 의미하는 바를 정확히 보여 주려고 노력할 것입니다.

모듈 기반 CMS를 구축 중이며 일부 모듈은 상위 모듈에서 상속받습니다. 내 문제는 부모 모듈을 "어린이"앞에 포함시켜야한다는 것입니다.

은 내가 XML 파일에서 moduleinfo을 취득 해,이 같은 배열에 저장 :

Array 
(
    [bloggy] => Array 
     (
      [module_id] => blog 
      [module_name] => Blog 
      [module_desc] => Description 
      [module_url] => http://www.url.se 
      [author] => Dev Name 
      [author_url] => http://url.se 
      [version] => 1.0 
      [inherit] => core|twitter 
      [path] => /path/to/file 
      [dependon] => Array 
       (
        [0] => core 
        [1] => twitter 
       ) 
     ) 

나는 위에서 보는 바와 같이 상속에 폭발 "dependon"로 저장 했어. 이제 문제는 파일을 포함시킬 순서를 어떻게 정렬 할 수 있는가입니다. 모든 모듈은 코어에서 상속 받지만 depenon 배열에 다른 모듈이 있으면 "자식"모듈을 포함해야합니다.

무슨 뜻인지 이해해 주시겠습니까?

// Tobias

답변

1

"topological sort"를 참조하십시오.

0

모듈을 클래스로 만든 다음 __autoload 마법 함수를 사용하여 필요한 모든 PHP 파일을 자동으로 포함/필요로 할 수 있습니다.

그런 식으로하면 복잡한 의존성이있을 때 두통이 줄어 듭니다.

자동 로딩에 대한 자세한 내용은 PHP 매뉴얼을 참조하십시오.

+0

모든 모듈은 클래스입니다. 그리고 저는 자동로드를 사용합니다. 그러나 당신이 어떻게 의미하는지 이해하지 못합니까? – sandelius

+1

자동 로딩을 이미 사용하고 있다면 문제가 보이지 않습니다. 자동 로딩은 자동으로 요구되는 모든 의존성을 해결해야하며, 포함하지 않아도됩니다. – selfawaresoup

0

파일의 모든 종속성을 포함하기 만하면됩니다. 시도해보십시오.

// module1.php 
require_once 'core.php' 

// module2.php 
require_once 'core.php' 
require_once 'module1.php' 

// module3.php 
require_once 'core.php' 
require_once 'module1.php' 
require_once 'module2.php' 

포함 모듈 3에는 module2, module1 및 core도 포함됩니다. 모듈 3의 코어와 module1은 생략 할 수 있습니다.하지만 모듈 3은 여전히로드되지만 모든 내용을 포함해야합니다.

또는 자동 로딩을 사용하고 걱정하지 마십시오.

+0

많은 의존성을 포함하는 것은 대부분의 경우에 많은 낭비입니다. 왜냐하면 많은 PHP 파일이 실제로 많이 사용되는 긴 include 목록을 신속하게 구축하기 때문입니다. 자동 로딩이이를 해결합니다. – selfawaresoup

+0

예제에서 리소스를 낭비하고 있는지 여부는 알 수 없습니다. 게다가, 나는 또한 자동 로딩을 사용한다고 말했다. – Gordon

0

음 조금 더 설명하려고합니다.

xml 정보 파일의 모듈 폴더를 검색하고 데이터를 배열에 저장하고 파일의 경로를 배열에 저장합니다.

그런 다음 모듈을 포함하고 인스턴스화하기 위해 foreach 루프를 사용합니다. 내 문제는 부모 모듈을 "자식"전에 인스턴스화해야한다는 것입니다.

새 모듈을 추가 할 때 코어 파일을 건드리지 않으려 고합니다. 부모 모듈에서 후크를 사용해야합니다.

+0

그래서 기본적으로 Dependency Injection Service Containers를 찾고 있습니까? 이 경우 http : //components.symfony-project를 참조하십시오.org/dependency-injection / – Gordon

관련 문제