unserialize() 请在第二个参数中指定 类 允许反序列化

unserialize() Please specify classes allowed for unserialization in 2nd argument

在我的 Symfony 应用程序中,我有一个 User 序列化的实体。在 unserialize() 方法中,我这样做了:

    public function unserialize($serialized)
    {
        [
            $this->id,
            $this->email,
            $this->password,
            $this->enabled
        ] = unserialize($serialized);
    }

但是 PhpStorm 以红色下划线 unserialize($serialized) 显示以下消息:

Please specify classes allowed for unserialization in 2nd argument.

我不知道应该使用什么作为第二个参数。经过一些研究,我发现我们可以这样写:

unserialize($serializeObj, ["allowed_classes" => true]);

但我也发现了这个:

unserialize(
    $serializedData,
    ['allowed_classes' => ['Class1', 'Class2']]
);

我有点困惑,我不知道我应该在我的案例中放什么,这样 PhpStorm 就不会抱怨这个。

如果您实际上是在序列化一个数组,而不是一个 class 实例,您只需要按照允许的方式传递 false classes.

 public function unserialize($serialized)
{
        [
            $this->id,
            $this->email,
            $this->password,
            $this->enabled
        ] = unserialize($serialized, ['allowed_classes' => false]);
}

如果你正在序列化整个实体,你需要传递class你希望从反序列化中实例化

所以我们假设 class 是 App\Entity\User,

public function unserialize($serialized) {

    $new = unserialize($serialized, ['allowed_classes' => [ User::class ]]);
    $this->id       = $new->getId();
    $this->$email   = $new->getEmail();
    $this->password = $new->getPassword();
    $this->enabled  = $new->isEnabled();

}

为了简单起见,我假设您在实体中有 getter 个方法。