Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 序列化程序virtualProperty和访问器之间的区别是什么?_Php_Symfony_Serialization_Jmsserializerbundle_Jms Serializer - Fatal编程技术网

Php 序列化程序virtualProperty和访问器之间的区别是什么?

Php 序列化程序virtualProperty和访问器之间的区别是什么?,php,symfony,serialization,jmsserializerbundle,jms-serializer,Php,Symfony,Serialization,Jmsserializerbundle,Jms Serializer,根据序列化程序文档 注意:这只适用于序列化,完全忽略 在反序列化期间 除了这个限制之外,使用a和a的区别是什么 如果没有,为什么要使用它,因为没有这个限制。最好的解释有一个具体的例子来说明。因此,我将尝试给出一个同时使用virtualProperty和accessor的示例来显示它们的差异 我们有一个实体人,它有许多不同的属性。其中之一是生日。让我们来看一个例子: class Person { /** * @Accessor(getter="getFormattedBirthd

根据序列化程序文档

注意:这只适用于序列化,完全忽略 在反序列化期间

除了这个限制之外,使用a和a的区别是什么


如果没有,为什么要使用它,因为没有这个限制。

最好的解释有一个具体的例子来说明。因此,我将尝试给出一个同时使用virtualProperty和accessor的示例来显示它们的差异

我们有一个实体人,它有许多不同的属性。其中之一是生日。让我们来看一个例子:

class Person
{
    /**
     * @Accessor(getter="getFormattedBirthdate", setter="setBirthdate")
     */
    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');
    }

    /**
     * @VirtualProperty()
     */
    public function getAge(): int
    {
        $today = new \DateTime('today');
        $age = $today->diff($this->birthdate);

        return $age->y;
    }
}
我们使用访问器指定在序列化和反序列化期间分别使用哪个getter和setter方法。默认情况下,将使用getBirthdate和setBirthdate。但是,我们希望使用getFormattedBirthdate进行序列化

VirtualProperty帮助我们显示计算的年龄。它将在序列化期间使用。因为它不是一个真正的属性,所以它没有setter,反序列化它也没有意义


我希望这个例子有助于理解访问器和虚拟属性之间的区别。

最好的解释有一个具体的例子用于说明。因此,我将尝试给出一个同时使用virtualProperty和accessor的示例来显示它们的差异

我们有一个实体人,它有许多不同的属性。其中之一是生日。让我们来看一个例子:

class Person
{
    /**
     * @Accessor(getter="getFormattedBirthdate", setter="setBirthdate")
     */
    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');
    }

    /**
     * @VirtualProperty()
     */
    public function getAge(): int
    {
        $today = new \DateTime('today');
        $age = $today->diff($this->birthdate);

        return $age->y;
    }
}
我们使用访问器指定在序列化和反序列化期间分别使用哪个getter和setter方法。默认情况下,将使用getBirthdate和setBirthdate。但是,我们希望使用getFormattedBirthdate进行序列化

VirtualProperty帮助我们显示计算的年龄。它将在序列化期间使用。因为它不是一个真正的属性,所以它没有setter,反序列化它也没有意义


我希望这个例子有助于理解访问器和虚拟属性之间的区别。

是的,最好的解释有一个具体的例子用于说明。回答得很好。谢谢是的,最好的解释有一个具体的例子来说明。回答得很好。非常感谢。