Php Phalcon v.1.3。型号';取消序列化后,s OnConstruction不会开火

Php Phalcon v.1.3。型号';取消序列化后,s OnConstruction不会开火,php,phalcon,Php,Phalcon,Phalcon 1.3 MVC模型文档说明: initialize()方法在请求过程中只调用一次,用于执行适用于应用程序中创建的模型的所有实例的初始化。如果要为创建的每个实例执行初始化任务,可以“onConstruct” 我有一个被序列化并实现onConstruct()的模型类: Book的多个实例存储在memcached中,然后在同一请求中分别加载回 问题是从memcached读取时(即非序列化)Book的onstruct永远不会被调用 我还注意到,当取消序列化一行中的多个书籍时,其init

Phalcon 1.3 MVC模型文档说明:

initialize()方法在请求过程中只调用一次,用于执行适用于应用程序中创建的模型的所有实例的初始化。如果要为创建的每个实例执行初始化任务,可以“onConstruct”

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

Book
的多个实例存储在memcached中,然后在同一请求中分别加载回

问题是从memcached读取时(即非序列化)
Book
onstruct
永远不会被调用

我还注意到,当取消序列化一行中的多个
书籍时,其
initialize()
仅在第一个实例中被调用(根据文档,这是正确的)。但是,当从memcached加载
Book
#2时,它的
$b
属性为空(预期为2,如文档所述:“应用模型的所有实例”)

问题:

  • 为什么
    onstruct()
    根本不点火
  • 为什么
    Book
    的第二个实例没有将$b分配给2

  • 谢谢

    我可能猜序列化/非序列化模型被认为已经初始化,所以如果您需要一些额外的技巧,您必须在非序列化之后进行,例如在
    unserialize
    方法期间

    无论如何,根据上面的逻辑,我会考虑报告一个bug。若initialize方法被调用一次,那个么每个对象都应该被非序列化调用,或者根本并没有调用,以使事情保持一致

    我可以用一个工作示例来验证这一点

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