Типы объединения в PHP 8


В этой статье я собираюсь обсудить типы объединения, которые появятся в будущих версиях PHP через этот RFC, Чтобы понять, почему и как важны типы объединения в PHP, давайте сначала разберемся, что такое типы объединения.

Какие бывают типы профсоюзов?

Согласно Википедии,

В информатике объединение – это значение, которое может иметь любое из нескольких представлений или форматов в одной и той же позиции в памяти; это состоит из переменной, которая может содержать такую ​​структуру данных.

Таким образом, в основном, тип объединения описывает значение, которое может быть одним из нескольких типов. «Тип объединения» принимает значения нескольких разных типов, а не одного. Типы объединения также называются «типами пересечений». Это означает, что если язык программирования поддерживает типы объединения, вы можете объявить переменную в нескольких типах. Например, может быть функция, которая может принимать переменную типа «string» или «float» в качестве параметра.

Когда дело доходит до PHP, он уже поддерживает два специальных типа объединения:

  • Type или же null, используя специальные ?Type синтаксис.
  • array или же Traversable, используя специальный повторяемый тип.

Но на данный момент произвольный тип объединения не поддерживается языком. Таким образом, программисты склонны использовать аннотации PHPDoc в качестве обходного пути.

class Number {
    /**
     * @var int|float $number
     */
    private $number;

    /**
     * @param int|float $number
     */
    public function setNumber($number) {
        $this->number = $number;
    }

    /**
     * @return int|float
     */
    public function getNumber() {
        return $this->number;
    }
}

Но это изменится, потому что типы объединения приходят в PHP изначально. предложение РФС был одобрен, что добавляет поддержку типов объединения в PHP. В соответствии с этим предложением типы объединения указываются с использованием синтаксиса. T1|T2|... и может использоваться во всех позициях, где типы в настоящее время принимаются. Как в следующем примере:

class Number {
    private int|float $number;

    public function setNumber(int|float $number): void {
        $this->number = $number;
    }

    public function getNumber(): int|float {
        return $this->number;
    }
}

Преимущества использования типов объединения

Как вы можете видеть в приведенном выше примере, синтаксис теперь намного менее стандартен, чем phpdoc. Помимо этого, наличие типов объединения может принести следующие преимущества:

  • Типы на самом деле применяются, поэтому ошибки могут быть обнаружены на ранней стадии.
  • Поскольку они применяются принудительно, информация о типах с меньшей вероятностью устареет или пропустит крайние случаи.
  • Типы проверяются во время наследования, следуя принципу подстановки Лискова.
  • Типы доступны через Reflection.

Сфера действия типов объединения

Типы Union будут поддерживать все типы, которые в настоящее время поддерживаются PHP. Есть некоторые исключения к этому, такие как void тип, Nullable типы соединений, false псевдотип и так далее. Вы можете прочитать больше об этом Вот,

В заключение

Типы объединения все великолепны, и они, скорее всего, будут включены в PHP 8.0. Так что до тех пор нам придется прибегать к старым добрым PHP DOCBlocks.