PHP参考手册说,在序列化对象时,不会保存方法.(见http://www.php.net/manual/en/language.oop5.serialization.php,第1段).
但是,手册中给出的第一个示例显示了一个序列化的方法,然后进行了反序列化和使用.
这不是矛盾吗?我错过了什么吗?
Kin*_*nch 11
我必须说,我没有看到第一个例子中序列化方法的位置.序列化时没有序列化任何方法,只有类名和属性.如果您查看序列化数据,可以看到这一点
$ser = serialize($object);
var_dump($ser);
Run Code Online (Sandbox Code Playgroud)
你会注意到,没有提到的方法.但是,如果您反序列化一个对象,它将由类名重新创建.换句话说:您将获得一个新对象,但使用之前序列化的值.
通常这并不像听起来那么重要,因为序列化/非序列化对象通常应该表现相同.
// serialize
class A {
public $a = null;
public function test () {
echo "Hello";
}
}
$a = new A;
echo $a->test(); // "Hello"
$x = serialize($a);
// unserialize (somewhere else)
class A {
public $a = null;
public function test () {
echo "World";
}
}
$a = unserialize($x);
echo $a->test(); // "World"
Run Code Online (Sandbox Code Playgroud)
这里序列化程序使用"错误"类,输出与预期的不同.只要您确保没有类名冲突,通常就不需要考虑它.