我正在使用PHP制作irc bot。在开发时,我希望能够动态加载和卸载类/函数。
请注意,PHP保持活力。
例如:
主文件:
class stuff {
function stuff() { echo 'this'; }
function replaceFunction() {
remove(stuff);
add(stuff);
}
}
$stuff = new stuff();
我编辑了一个功能:
function stuff() { echo 'that'; }
理想情况下,现在它已被编辑,我所要做的就是触发replaceFunction()来更新旧函数。
我怎样才能让它真正起作用?
答案 0 :(得分:1)
如果您唯一需要的是拥有一个具有某个功能的类,并且您希望能够通过触发replaceFunction
来交换那个功能的功能,那么您可以分配对该类或类似的一些关闭:
class stuff {
private $callback;
public function __construct()
{
$this->callback = array($this, 'stuff');
}
public function __invoke()
{
call_user_func($this->callback);
}
private function stuff() { echo 'This'; }
function replace($function) {
$this->callback = $function;
}
}
$stuff = new stuff;
$stuff(); # original function
$stuff->replace(function() { echo 'That'; });
$stuff(); # replaced function
或简短版本:
$stuff = function() {echo 'This';};
$stuff(); # original function
$stuff = function() {echo 'That';};
$stuff(); # replaced function
该类的好处是您可以更好地控制分配和调用函数。
答案 1 :(得分:0)
也许你可以先删除这些功能
runkit_function_remove ( string $funcname );
使用function_exists()
检查该功能是否已存在。
编辑:
class stuff {
function replaceFunction() {
runkit_function_remove('stuff');
function stuff() { echo 'New stuff'; }
}
}
$stuff = new stuff();
$stuff->replaceFunction();