__sleep()和超类属性

Fra*_*isc -2 php oop serialization sleep

鉴于两个类:

class A
{
   private $prop1;
}
class B extends A
{
   private $prop2;
   public function __sleep()
   {
      return array('prop1','prop2');
   }
}
Run Code Online (Sandbox Code Playgroud)

这只会序列化prop2它的值,因为它是B类的直接属性.

如何让它输出prop1从超类A 继承的?

编辑:
未定义__sleep()将显示private序列化字符串中的属性而不将其设置为protected.他们看起来像是?A?prop1,只有我不能得到 是什么.

cwa*_*ole 10

显式调用父类的函数并追加结果:

class A
{
   private $prop1;
   public function __sleep()
   {
      return array('prop1');
   }
}

class B extends A
{
   private $prop2;

   public function __sleep()
   {
      $arr = parent::__sleep();
      array_push( $arr, 'prop2' );
      return $arr;
   }
}
Run Code Online (Sandbox Code Playgroud)

  • @Francisc你可以用它来返回对象的所有变量,甚至是超类中的私有变量:`return array_keys((array)$ this);` (4认同)