在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脚本的开头定义:
立即学习“PHP免费学习笔记(深入)”;
function __autoload($className){ include_once $className . '.php';}
立即学习“PHP免费学习笔记(深入)”;
这样在new某个clas而当前的脚本未包含这个class的定义时,PHP就会寻找__autoload这个function,这时你恰好定义了__autoload,PHP就会调用这个函数了。
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号