法尔康 v.1.3.模型的 onConstruct在反序列化后不会触发


Phalcon v.1.3. Model's onConstruct does not fire after unserialize

Phalcon 1.3 MVC 模型文档 说:

The initialize() method is only called once during the request, it’s intended to perform initializations that apply for all instances of the model created within the application. If you want to perform initialization tasks for every instance created you can ‘onConstruct’

我有一个被序列化并实现 onConstruct() 的模型类:

class Book extends 'Phalcon'MVC'Model
{
     protected $a;
     protected $b;
     function onConstruct() {
          $this->a = 1;
     }
     function initialize() {
          $this->b = 2;
     }
}

Book的多个实例存储在 memcached 中,然后在同一请求中单独加载回去。

问题是从memcached读取(即反序列化)时,BookonConstruct永远不会被调用。

我还注意到,当连续反序列化多个Book时,其initialize()仅在第一个实例中被调用(根据文档,这是正确的)。但是,当从 memcached 加载 Book #2 时,它$b属性为 null(预计为 2,如文档所说:"适用于模型的所有实例")。

问题:

  1. 为什么onConstruct()根本不着火?
  2. 为什么Book的第二个实例没有$b分配给 2?

谢谢!

我可能猜到序列化/未序列化的模型被认为是已经初始化的,所以如果你需要一些额外的技巧,你必须在反序列化后做,例如unserialize方法期间。

无论如何,根据上层逻辑,我会考虑报告错误。如果初始化方法被调用一次,则应调用每个对象的反序列化或根本不调用,以使事情保持一致。

我可以用工作示例对此进行测试。