Php 重写以前使用的函数

Php 重写以前使用的函数,php,irc,auto-update,keep-alive,Php,Irc,Auto Update,Keep Alive,我正在用PHP制作一个irc机器人。在开发过程中,我希望能够动态加载和卸载类/函数 请注意,PHP是保持活动的 例: 主文件: class stuff { function stuff() { echo 'this'; } function replaceFunction() { remove(stuff); add(stuff); } } $stuff = new stuff(); function stuff() { echo '

我正在用PHP制作一个irc机器人。在开发过程中,我希望能够动态加载和卸载类/函数

请注意,PHP是保持活动的

例:

主文件

class stuff {

    function stuff() { echo 'this'; }

    function replaceFunction() {
        remove(stuff);
        add(stuff);
    }
}
$stuff = new stuff();
function stuff() { echo 'that'; }
下一个 我编辑一个函数

class stuff {

    function stuff() { echo 'this'; }

    function replaceFunction() {
        remove(stuff);
        add(stuff);
    }
}
$stuff = new stuff();
function stuff() { echo 'that'; }
因此,理想情况下,现在已经编辑好了,我所要做的就是触发replaceFunction()来更新旧函数


我如何才能使它真正工作?

也许您可以先删除这些函数

runkit_function_remove ( string $funcname );
使用
函数\u exists()
检查函数是否已经存在

编辑:


也许您可以先删除这些函数

runkit_function_remove ( string $funcname );
使用
函数\u exists()
检查函数是否已经存在

编辑:


如果您只需要拥有一个具有函数的类,并且希望能够通过触发
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

该类的好处是您可以更好地控制函数的分配和调用。

如果您只需要拥有一个具有函数的类,并且希望能够通过触发
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

该类的好处是,您可以更好地控制函数的分配和调用。

我更新了我的问题,使其更清晰,这绝对是一个好的开始。我更新了我的问题,使其更清晰,这绝对是一个好的开始。重新定义内存中的对象类?我想知道那会是什么样子。重新定义内存中的对象类?我想知道那会是什么样子。你认为什么样的安全措施?这基本上是注入代码,所以我假设您知道自己在做什么,不是吗?我曾经看到(并且必须修复)一个安全漏洞(灾难),它是由于函数名作为变量传递而导致的。因此,当我看到人们接受函数名作为变量时,我首先想到的就是安全性。但这是一个url变量,而在这里,任何安全问题都将由开发人员创建。你的答案似乎很好。@Ted:是的,这是开发人员制造的问题。然后选择类变量(第一个示例)。这样做以后,无论何时调用或更改函数,您都可以保持控制。您认为什么样的安全性?这基本上是注入代码,所以我假设您知道自己在做什么,不是吗?我曾经看到(并且必须修复)一个安全漏洞(灾难),它是由于函数名作为变量传递而导致的。因此,当我看到人们接受函数名作为变量时,我首先想到的就是安全性。但这是一个url变量,而在这里,任何安全问题都将由开发人员创建。你的答案似乎很好。@Ted:是的,这是开发人员制造的问题。然后选择类变量(第一个示例)。这样,无论何时调用或更改函数,您都可以在以后保持控制。