개발! 딱 깔끔하고 센스있게!

PHP 에서 동적 클래스 제거 본문

개발 스크랩 메모/PHP

PHP 에서 동적 클래스 제거

렉사이 2020. 12. 13. 02:40

저 는 다음 과 같은 방식 으로 플러그 인의 동적 로드 를 실현 하 였 습 니 다:

function processPlugin( $plgFile, $db ) { require_once( $plgFile ); $plgin = new PlginImpl(); $plgin->setDb($db); $ret = $plgin->process(); return $ret; } 

모든 플러그 인 은 PlginImpl 라 는 종 류 를 정의 합 니 다.

이 종 류 는 잘 작 동 합 니 다.

하지만 process () 값 에서 지정 한 다른 플러그 인 을 호출 할 수 있 습 니 다.

이것 은 위 에서 지정 한 같은 방법 을 호출 할 것 입 니 다.

그러나 실패 한 원인 은:

Fatal error: Cannot redeclare class PlginImpl in .. 

모든 플러그 인 은 클래스 입 니 다.

즉:

class PlginImpl extends Plugin implements PluginInterface 

Plugin 은 일부 유용 한 기능 을 제공 합 니 다.

Plugin Interface 는 procss () 를 정의 합 니 다.

모든 플러그 인 이 PlginImpl 이 라 고 불 린 다 고 가정 합 니 다.

그래서 문제 가 되 었 습 니 다: require \ u 로 클래스 (PlginImpl) 를 한 번 더 불 러 온 후, 제거 하 는 방법 이 있 습 니까?아니면 전혀 다른 방법 이 있 을 까?


EDIT I tried without succeeding the following things:
  • unset $plgin after process()
  • calling __destruct() - it doesn't work neither within processPlugin() nor within the process method

대답 하 다.

이 종 류 를 마 운 트 한 다음 에 마 운 트 해제 할 수 없 기 때문에 모든 플러그 인 이름 을 바 꿀 수 있 습 니 다.

PluginX, PlumginY 등등. 하지만 이것 은 중요 하지 않 습 니 다.

보 여 주 는 플러그 인 화면 을 사용 하도록 강요 할 수 있 기 때 문 입 니 다.

특정 플러그 인 을 불 러 오 려 면, 단순히 solomongaby 가 제안 한 내용 을 사용 할 수 있 습 니 다.

하지만 파일 이름 대신 플러그 인의 이름 을 전달 할 수 있 습 니 다.

이런 것:

function loadPlugin($pluginName) { require_once $pluginName . '.php'; $plugin = new $pluginName; //do whatever with $plugin } 
Comments