В чем разница между сериализатором virtualProperty и аксессором? - PullRequest
0 голосов
/ 16 марта 2019

В Сериализаторе virtualProperty Документация

Примечание. Это работает только для сериализации и полностью игнорируется при десериализации.

Кроме этого ограниченияКакая разница между virtualProperty и аксессором ?

Если ничего, то зачем его использовать, как аксессор не имеет этого ограничения.

1 Ответ

3 голосов
/ 16 марта 2019

У лучших объяснений есть конкретный пример для иллюстративных целей.Поэтому я попытаюсь привести пример использования 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 , чтобы указать, какой метод получения и установки будет использоваться при сериализации и десериализации соответственно.По умолчанию getBirthdate и setBirthdate были бы использованы.Однако мы хотели бы использовать getFormattedBirthdate для сериализации.

VirtualProperty помогает нам отображать рассчитанный возраст.Он будет использоваться во время сериализации.Поскольку это не реальное свойство, оно не имеет установщика и не имеет смысла десериализовать его.

Надеюсь, этот пример поможет понять разницу между Accessor и VirtualProperty .

...