serializer virtualProperty 和 accessor 有什么区别?
What is the difference between the serializer virtualProperty and the accessor?
根据序列化程序 virtualProperty 文档
Note: This only works for serialization and is completely ignored
during deserialization.
除了这个限制,使用 virtualProperty 和 accessor 有什么区别?
如果没有,为什么要使用它,因为 accessor 没有此限制。
最好的解释有一个具体的例子来说明。因此,我将尝试举一个使用 virtualProperty
和 accessor
的示例来显示它们的差异。
我们有一个实体 Person
,它有许多不同的属性。其中之一是 birthdate
。让我们看例子:
class Person
{
<strong>/**
* @Accessor(getter="getFormattedBirthdate", setter="setBirthdate")
*/</strong>
private $birthdate;
public function setBirthdate(\DateTimeInterface $birthdate): self
{
$this->birthdate = $birthdate;
return $this;
}
public function getBirthdate(): \DateTimeInterface
{
return $this->birthdate;
}
public function getFormattedBirthdate(): string
{
return $this->birthdate->format('j F Y');
}
<strong>/**
* @VirtualProperty()
*/</strong>
public function getAge(): int
{
$today = new \DateTime('today');
$age = $today->diff($this->birthdate);
return $age->y;
}
}
我们使用 Accessor 来指定在序列化和反序列化期间分别使用哪个 getter 和 setter 方法。默认使用 getBirthdate
和 setBirthdate
。但是,我们希望使用 getFormattedBirthdate
进行序列化。
VirtualProperty 帮助我们显示计算的年龄。它将在序列化期间使用。因为它不是真正的 属性,所以它没有 setter 并且反序列化它没有任何意义。
我希望这个例子有助于理解 Accessor 和 VirtualProperty.
之间的区别
根据序列化程序 virtualProperty 文档
Note: This only works for serialization and is completely ignored during deserialization.
除了这个限制,使用 virtualProperty 和 accessor 有什么区别?
如果没有,为什么要使用它,因为 accessor 没有此限制。
最好的解释有一个具体的例子来说明。因此,我将尝试举一个使用 virtualProperty
和 accessor
的示例来显示它们的差异。
我们有一个实体 Person
,它有许多不同的属性。其中之一是 birthdate
。让我们看例子:
class Person
{
<strong>/**
* @Accessor(getter="getFormattedBirthdate", setter="setBirthdate")
*/</strong>
private $birthdate;
public function setBirthdate(\DateTimeInterface $birthdate): self
{
$this->birthdate = $birthdate;
return $this;
}
public function getBirthdate(): \DateTimeInterface
{
return $this->birthdate;
}
public function getFormattedBirthdate(): string
{
return $this->birthdate->format('j F Y');
}
<strong>/**
* @VirtualProperty()
*/</strong>
public function getAge(): int
{
$today = new \DateTime('today');
$age = $today->diff($this->birthdate);
return $age->y;
}
}
我们使用 Accessor 来指定在序列化和反序列化期间分别使用哪个 getter 和 setter 方法。默认使用 getBirthdate
和 setBirthdate
。但是,我们希望使用 getFormattedBirthdate
进行序列化。
VirtualProperty 帮助我们显示计算的年龄。它将在序列化期间使用。因为它不是真正的 属性,所以它没有 setter 并且反序列化它没有任何意义。
我希望这个例子有助于理解 Accessor 和 VirtualProperty.
之间的区别