gpt4 book ai didi

php - Doctrine如何设置私有(private)ID

转载 作者:可可西里 更新时间:2023-11-01 13:33:54 26 4
gpt4 key购买 nike

在 PHP 中,我可以创建一个带有私有(private)/ protected $id 变量且没有 setter 的模型。

Doctrine ORM 能够在保存/加载对象时设置该属性。

这在内部是如何运作的?我假设这是通过序列化处理的,但我无法找到导致此行为的代码。

最佳答案

第一次 doctrine 实例化一个实体(例如 User),它是这样做的:

$this->prototype = unserialize(sprintf('O:%d:"%s":0:{}', strlen($this->name), $this->name));

它在不调用其构造函数的情况下创建该类型的对象(反序列化避免了对 __construct 的调用,并且他们有意这样做,因此他们不必担心构造函数的外观或功能).

在第一个对象被初始化后,Doctrine 使用clone 来创建相同对象类型的新实例。

$entity = clone $this->prototype;

从克隆的对象中,它将:

$reflection = new \ReflectionObject($entity);
$property = $reflection->getProperty('idField');
$property->setAccessible(true);
$property->setValue($entity, 123);

由于 Doctrine 对复合主键的支持,执行此操作的实际代码更加复杂,但这应该能为您指明正确的方向。

关于php - Doctrine如何设置私有(private)ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14981251/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com