저는 프로젝트 중 하나에 구현할 간단한 플러그인 시스템의 프로토 타입을 만들려고합니다. '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 파일 변경에
나는 그것이 어떻게 작동하는지 모르겠지만,이 한
glob('Plugins/*.php')
합니다. 감사. – James예 __BASE.php가 Plugins 폴더에 있지만 사용자가 아닌 인덱스 페이지에 포함되어 있습니다. 그것은 나를 위해 일합니다. – NemanjaLazic