用户操作
[留言]  [发消息]  [加为好友] 
订阅我的博客
XML聚合    FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
shengcha的公告
贫僧功力尚浅,尚不能隔衣疗伤,姑娘,得罪了. 开始发布《PHP设计模式指南中文美化本》,一周一次更新。
文章分类
原来链接是要分类的
学着站在巨人的肩膀上
存档

原创  PHP Session保存Object 收藏

在PHP中,使用Session保存Object时,PHP会将Object自动序列化。在读取Session变量时,准确地说是在session_start时,PHP会将Session中已序列化的Object反序列化。这时就需要Class的定义,Why?因为序列化时只是保存了Object的属性值。如果Object包含方法,在反序列化时就需要Class定义来还原方法。

通常PHP.ini中可以开启session_auto_start,这样当PHP脚本开始执行时,就会自动将Session中的Object反序列化。但是这个时候我们不会把所有的类定义文件都包含进来。关闭session_auto_start吧,主意不错,把类定义文件全部包含进来之后再调用session_start()函数,问题好像解决了。

等等,每次请求都会使用session中的所有变量吗?不一定吧?那么为什么要把所有类定义文件包含进来呢?要是有100个类定义文件,那不慢死。有没有按需包含类定义文件的方法呢?有!那就是PHP5的__autoload函数。简单地,在PHP脚本的开头定义:

function __autoload($className)
{
    include_once $className . '.php';
}

这样在new某个class时,如果当前的脚本未包含这个class的定义,PHP就会寻找__autoload这个function,这时你恰好定义了__autoload,PHP就会调用这个函数了。

发表于 @ 2008年10月08日 22:55:00 | 评论( loading... ) | 编辑| 举报| 收藏

旧一篇:YUI之DataTable(未完待续)

  • 发表评论
  • 评论内容:
  •  
Copyright © shengcha
Powered by CSDN Blog