2014-02-05 2 views
0

저는 프로젝트 중 하나에 구현할 간단한 플러그인 시스템의 프로토 타입을 만들려고합니다. 'oncall'방법은 내가 정의 기능을 사용하여 플러그인 폴더에 클래스에 속하는 경우PHP 플러그인 시스템이 작동하지 않는 이유는 무엇입니까?

  • Index.php
  • Plugins/__BASE.php
  • Plugins/Sample.php

인덱스 파일 검사 : 나는 4 개 파일이 Plugins 클래스 (__BASE.php). 존재하면 실행합니다.

require_once 'Plugins/__BASE.PHP'; 

$func = 'oncall'; 
$plugins = new Plugins(); 

if($plugins->IsPluginMethod($func)) { 
    $obj = $plugins->GetObject($func); 
    call_user_func(array($obj, $func)); 
} 
else 
    echo "'$func' isn't part of a plugin!"; 

__BASE.php은 모든 플러그인이 확장되는 기본 플러그인 클래스입니다. 두 가지 방법이 있습니다 : IsPluginMethod()GetObject(). IsPluginMethod는 제공된 메서드 이름이 클래스에 속해 있는지 확인하고 GetObject는 메서드가 속한 클래스의 인스턴스를 반환합니다.

class Plugins { 

    public $age = "100"; 

    public function IsPluginMethod($func) { 
     foreach(glob('*.php') as, $file) { 
      if($file != '__BASE.php') { 
       require_once $file; 
       $class = basename($file, '.php'); 
       if(class_exists($class)) { 
        $obj = new $class; 
       if(method_exists($obj, $func)) 
        return true; 
       else 
        return false; 
      } 
     } 
    } 
} 

    public function GetObject($func) { 
     foreach(glob('*.php') as $file) { 
      if($file != '__BASE.php') { 
       require_once $file; 
       $class = basename($file, '.php'); 
       if(class_exists($class)) { 
        $obj = new $class; 
        return $obj; 
       } 
      } 
     } 
    } 
} 

Sample.php는 $ this-를 인쇄하는 샘플 플러그인> 플러그인 클래스에 정의되는 시대입니다.

'oncall' isn't part of a plugin! 

누구든지 도와 드릴까요 :

class Sample extends Plugins { 

    public function oncall() { 
     echo "Age: {$this->age}"; 
    } 
} 

이것은 내가 index.php를에서 볼 무엇인가? 감사. __BASE.php 파일 변경에

답변

0

(glob('*.php')

+0

나는 그것이 어떻게 작동하는지 모르겠지만,이 한 glob('Plugins/*.php')합니다. 감사. – James

+0

예 __BASE.php가 Plugins 폴더에 있지만 사용자가 아닌 인덱스 페이지에 포함되어 있습니다. 그것은 나를 위해 일합니다. – NemanjaLazic

관련 문제