有没有办法用PHP“解包”一个文件?

时间:2011-01-24 00:51:06

标签: php include

我正在研究PHP IRC Bot,我正在研究这些命令。

main.php的开头,启动机器人的脚本,它包含class_lib.php文件并实例化该类的对象。我想处理一个!reload命令,它将“解包”该文件,然后重新包含它。这是可能的,或者如果我在发送该命令时再次include它会没有问题吗?

编辑:基本上,我希望能够修改并重新加载该类,而无需重新启动僵尸程序。

5 个答案:

答案 0 :(得分:5)

不,你不能。重新审视您的设计。不要将类的定义与对象的实例化结合起来。

答案 1 :(得分:2)

为什么不让对象重新加载默认设置,或者重新启动,而不是你描述的内容?我很确定你无论如何都不能这样做。

另外,不要尝试使用class_lib.php加载对象。包含带有对象的类文件,然后在需要的地方和时间创建对象。这样你可以阻止它,销毁对象,然后重新实例化另一个对象,这应该可以实现你想要的。

答案 2 :(得分:1)

恐怕无法取消包含文件。如果它是一个函数,您可以每次动态生成一个新函数。

检查:

http://php.net/manual/en/function.create-function.php

您可以为变量指定一个函数,然后清除该变量并再次指定它。

答案 3 :(得分:0)

迟到的回答..

您可以创建一个包含文件的数组,然后创建eval(file_get_contents($ filename))

我一直在为我自己的IRC客户端PITC工作,这可能是我可能使用的方法,这是我之前做过的事情

答案 4 :(得分:0)

晚会,但我必须提到以下PHP扩展名:

http://www.php.net/manual/en/book.runkit.php

  

runkit扩展提供了修改常量,用户定义函数和用户定义类的方法。它还通过沙盒提供自定义超全局变量和可嵌入的子解释器。

这将允许您重新定义类,这在解析包含的文件时会发生。

注意:我没有使用过这个,我在研究之后发现它是否有可能以某种方式热交换某些类。我不能保证安全,不能提供动手信息。爱好。