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