我有一些方法供您尝试。 :) 玩得开心编码。
只有一个类的方法:
class main_class {
private $_MODS = array(),...;
public ...;
public function __construct(...) {
...
global $MODS_ENABLED;
$this -> $_MODS = $MODS_ENABLED;
}
...
public function __get( $var ) {
foreach ( $this->_MODS as $mod )
if ( property_exists( $mod, $var ) )
return $mod -> $var;
}
public function __call( $method, $args ) {
foreach ( $this->_MODS as $mod )
if ( method_exists( $mod, $method ) )
return call_user_method_array( $method, $mod, $args );
}
}
当你想处理多个类时的方法:
class modMe {
private $_MODS = array();
public function __construct__() {
global $MODS_ENABLED;
$this -> $_MODS = $MODS_ENABLED;
}
public function __get( $var ) {
foreach ( $this->_MODS as $mod )
if ( property_exists( $mod, $var ) )
return $mod -> $var;
}
public function __call( $method, $args ) {
foreach ( $this->_MODS as $mod )
if ( method_exists( $mod, $method ) )
return call_user_method_array( $method, $mod, $args );
}
}
class mainClass extends modMe {
function __construct(...){
$this -> __construct__();
}
}
现在让我们尝试使用它们:
$MODS_ENABLED = array();
$MODS_ENABLED[] = new mod_mail();
$myObj = new main_class(...);
$myObj -> mail("me@me.me","you@you.you","subject","message/body","Extra:Headers;More:Headers");
# Hey look, my mail class was just added into my main_class for later use.
注意:
我目前在我自己从头开始制作的 CMS (http://sitegen.com.au) 中使用第一种方法(我只有一个类,mod 是例外),效果很好,我的需要这个的原因是因为我的 main_class 是在我需要 ./mods-enabled/* 中的所有模块创建函数并更改其他函数的工作方式之后生成的,我还将再次回到这里,提供两个解决方案mods 都可以更改功能而没有一个获胜,因为它首先运行。我将我的插件一分为二,在每个站点上运行的模块,以及具有站点设置但甚至可能未启用的插件。
享受编程的乐趣。