PHP序列化对象方法吗?

Kim*_*nce 4 php serialization

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)

这里序列化程序使用"错误"类,输出与预期的不同.只要您确保没有类名冲突,通常就不需要考虑它.