在PHP 4.x中模拟PHP类魔术方法

时间:2011-07-29 16:24:43

标签: php oop

我当前雇主的生产服务器仍然运行PHP 4.x;由于某些原因,升级PHP版本是不可能的。

我正在实施一个很大程度上依赖于OOP使用的网络应用程序。我发现我能够通过小的hacks或聪明的解决方法(通常位于我扩展所有其他类的模板基类中)来模拟大量的PHP 5 OOP功能。目前,我需要为我的班级提供__sleep()__wakeup()魔术方法;有没有办法在PHP 4.x 中模拟此功能,而包含对方法调用的serialize()unserialize()调用?

2 个答案:

答案 0 :(得分:0)

我认为没有办法:PHP 5中的那些方法是由PHP引擎本身调用的。

正如您所猜测的,如果您想要更改序列化/反序列化过程,您必须使用一些额外的代码将您的调用打包到serialize()unserialize(),再调用那些非魔法 - - 方法

答案 1 :(得分:0)

您可以通过使用rename_function()override_function()重命名然后覆盖内置serialize()unserialize()函数来实现此目的。不过,这绝对是一个黑客攻击。

编辑:哎呀,我刚才意识到那些是调试器方法,所以这可能不适合你。 Runkit提供相同的功能,但它是一个需要安装的扩展,我假设如果你不能升级PHP,你将无法做到这一点。

编辑2:在任何一种情况下,为了清晰和可维护性,我认为您最好只定义自己的序列化和反序列化函数,其中您自省目标对象,调用特殊函数如果可用,请拨打serialize()