【问题标题】:php unserialize with private memberphp用私人成员反序列化
【发布时间】:2011-02-28 03:02:04
【问题描述】:

所以根据定义,类中的私有编号在序列化时以类名作为前缀。这给我带来了一个问题,我希望能够序列化/保存/反序列化一个确切的对象,无论 php 做什么都是给我另一个类名+变量名的变量用于私人号码。

有什么方法可以轻松地反序列化私人成员?

谢谢,

【问题讨论】:

  • 这应该通过反序列化自动发生。你能提供一个发生错误的例子吗?

标签: php serialization


【解决方案1】:

除非您的类实现了Serializable 接口或具有__wakeup and __sleep 方法,否则您无需担心序列化的内部结构。

例如:

class Foo {
   private $Secret = "Private (init)";

   public $FooSecret = "Public (init)";

   function setSecret($secret) {
      $this->Secret = $secret;
   }
   function getSecret() {
      return $this->Secret;
   }
}

$bar = new Foo();
$bar->setSecret("Private (after serialize / unserialize)");
$bar->FooSecret = "Public (after serialize / unserialize)";
var_dump(unserialize(serialize($bar)));

即使“FooSecret”和“Secret”之间存在潜在的名称冲突,PHP 也知道该怎么做并为您提供:

object(Foo)#2 (2) {
  ["Secret":"Foo":private]=>
  string(39) "Private (after serialize / unserialize)"
  ["FooSecret"]=>
  string(38) "Public (after serialize / unserialize)"
}

【讨论】:

    猜你喜欢
    • 2015-02-11
    • 2010-10-22
    • 1970-01-01
    • 2013-04-08
    • 1970-01-01
    • 2011-12-02
    • 1970-01-01
    • 2020-10-12
    • 1970-01-01
    相关资源
    最近更新 更多