最近喜欢上了用SESSION存储全局对象,十分好用方便。
其实过程很简单,当对象赋值到SESSION后,在脚本结束时,SESSION里面的对象会进行序列化(serialize)。而当到了其他页面时,session启用前则会进行反序列化操作(unserialize)。 这时候,只需要用魔术方法__sleep,__wakeup做点处理,就可以很方便地确保对象能正常使用了。
不过在这之前也有一个问题,如果在session启用前没有引入对象的类文件的话,该类就会变成了一个__PHP_Incomplete_Class Object了,同时对象的所有方法也无法使用。
一般来说这个问题其实不难解决只要在执行session_start()方法前先引入类文件就可以了。但是如果session是自动开启的话,这个问题就没那么好解决了。如果能将session.auto_start关掉固然好。如果不能的话...
其实也是有解决方法的,最简单的方法莫过于在脚本即将结束时才将对象序列化再放入SESSION,调用的时候先引入类然后再反序列化。但是这种方法其实不太完善,毕竟每次修改完对象之后,要将对象重新序列化再放入session,那么还有没有更好的方法呢,我再看看....