stdClass:__set_state()

以前用PHP做数据缓存的时候一直是将数据序列化(serialize)后存入文件,取出时再反序列化(unserialize),这样做除了效率低点没有其他问题。读取文件再解析,当然不如直接include来的快,这时候就要求缓存是以PHP代码的形式存储的,这里可以用到PHP的 var_export 函数,其返回的代码可以直接存储。这个方法貌似不错,但问题也来了:

Fatal errorCall to undefined method stdClass::__set_state() in xxx

__set_state()是PHP 5.1引入的一个魔术函数,接受一个数组作为参数,主要用在var_export的时候进行递归处理。可是使用的前提是得先定义啊~ 我习惯的数据存储方式都是用的stdClass,ezSQL默认从数据库取出来的数据结构也是以stdClass形式进行存储的……这下麻烦大了,stdClass本身是不存在__set_state()这个静态方法的……没辙了……只好改为数组……唉……

今天的牢骚没有结论,导出对象有除了序列化有没有更理想的方法呢?还是我真的就只能做数组的缓存了?

ps:有人已经向PHP提出申请了,哈哈~
http://aspn.activestate.com/ASPN/Mail/Message/php-dev/3713102

PHP面向对象编程及框架应用之我见

  php5问世已经好几年了,我的php历程是从php4开始的,之前的版本没经历过。php5在面向对象、异常处理方面做了若干改进(php5OOP参考),也使得php更像java了,搞得我有时候都迷茫了,到底是在写些什么乱七八糟的东西?

  php对我来说最大的吸引力是其简单易用和处理速度,然则现在国内出现了可以说是规模庞大的框架之争和面向对象之争。FleapPHP的作者很NB的说,你不用框架是因为你不愿意接受新事物,呵呵,我很欣赏自己的一句话,php框架是用来研究的,不是用来应用的,如果真的要用框架,我也就不是php的fans了,改行去搞MS的东西吧。

阅读全文 »