相关疑难解决方法(0)

PHP类中的"瞬态"属性?

我已经使用PHP几年了,但到目前为止,从未需要明确地处理序列化,只使用了$_SESSION.现在我有一个项目要求我手动实现某些数据的序列化机制 - 我意识到这个问题也适用$_SESSION.

我有一个包含许多属性的类.大多数这些属性都很小(如内存消耗):数字,相对较短的字符串等.但是该类还包含一些属性,这些属性可能包含HUGE数组(例如,数据库表的整个转储:100,000行,每行100个字段) ).碰巧,这是需要序列化/反序列化的类之一 - 幸运的是,包含大型数组的属性不需要序列化,因为它们本质上是临时工作,并且在必要时进行重建.

在Java中的这种情况下,我只是将属性声明为transient- 并且它将从serialisaion中省略.不幸的是,PHP不支持这样的限定符.

处理的一种方法是它有这样的东西:

class A implements Serializable
{
    private $var_small = 1234;
    private $var_big = array( ... );  //huge array, of course, not init in this way

    public function serialize()
    {
        $vars = get_object_vars($this);
        unset($vars['var_big']);
        return serialize($vars);
    }

    public function unserialize($data)
    {
        $vars = unserialize($data);
        foreach ($vars as $var => $value) {
            $this->$var = $value;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然而,这是相当麻烦的,因为serialize每次添加另一个瞬态属性时我都需要更新方法.此外,一旦继承发挥作用,这变得更加复杂 - 处理,因为瞬态属性可能在子类和父类中.我知道,它仍然可行,但我更愿意尽可能多地委托语言,而不是重新发明轮子.

那么,处理瞬态属性的最佳方法是什么?或者我错过了什么,PHP支持这个开箱即用?

php inheritance serialization class

9
推荐指数
1
解决办法
3355
查看次数

标签 统计

class ×1

inheritance ×1

php ×1

serialization ×1