我当前雇主的生产服务器仍然运行PHP 4.x;由于某些原因,升级PHP版本是不可能的。
我正在实施一个很大程度上依赖于OOP使用的网络应用程序。我发现我能够通过小的hacks或聪明的解决方法(通常位于我扩展所有其他类的模板基类中)来模拟大量的PHP 5 OOP功能。目前,我需要为我的班级提供__sleep()
和__wakeup()
魔术方法;有没有办法在PHP 4.x 中模拟此功能,而包含对方法调用的serialize()
和unserialize()
调用?
答案 0 :(得分:0)
我认为没有办法:PHP 5中的那些方法是由PHP引擎本身调用的。
正如您所猜测的,如果您想要更改序列化/反序列化过程,您必须使用一些额外的代码将您的调用打包到serialize()
和unserialize()
,再调用那些非魔法 - - 方法
答案 1 :(得分:0)
您可以通过使用rename_function()
和override_function()
重命名然后覆盖内置serialize()
和unserialize()
函数来实现此目的。不过,这绝对是一个黑客攻击。
编辑:哎呀,我刚才意识到那些是调试器方法,所以这可能不适合你。 Runkit提供相同的功能,但它是一个需要安装的扩展,我假设如果你不能升级PHP,你将无法做到这一点。
编辑2:在任何一种情况下,为了清晰和可维护性,我认为您最好只定义自己的序列化和反序列化函数,其中您自省目标对象,调用特殊函数如果可用,请拨打serialize()
。