Хабрахабр

[Перевод] PHP 8 в восьми кусочках кода

В PHP 8 появилось много новых функций, в этом списке мы рассмотрим самые выдающиеся.

Disclaimer: ссылка на эту статью на английском языке уже была в посте последнего PHP дайджеста. Если владеете языком достаточно, возможно, стоит перейти к оригиналу, там очень много сносок на другие англоязычные статьи.

Раз

use \Support\Attributes\ListensTo; class ProductSubscriber{ <<ListensTo(ProductCreated::class)>> public function onProductCreated(ProductCreated $event) { /* … */ } <<ListensTo(ProductDeleted::class)>> public function onProductDeleted(ProductDeleted $event) { /* … */ }}

Вместо docblock — атрибуты.

Да, я знаю, синтаксис может быть не таким, как вы хотели или надеялись. Возможно, вы предпочли бы @, @:, или docblocks, или что-то еще. Но он будет именно таким. Единственное, что стоит упомянуть о синтаксисе, это то, что все варианты обсуждались, и есть очень веские причины, по которым этот синтаксис был выбран. Вы можете прочитать краткое резюме об этом в RFC, или вы можете прочитать всю дискуссию о RFC в списке внутренних компонентов.


Два

public function foo(Foo|Bar $input): int|float; public function bar(mixed $input): mixed;

Объединение типов позволяет указывать сразу несколько типов. Также есть новый mixed тип, который представляет несколько типов одновременно.


Три

interface Foo{ public function bar(): static;}

Можно указать static в return type.


Четыре

[JIT]opcache.jit=5

Встроенный JIT-компилятор.

Что такое JIT?

«JIT» расшифровывается как «just in time» — «в нужный момент». Вы, вероятно, знаете, что PHP является интерпретируемым языком: он не скомпилирован как программа на C, Java или Rust. Вместо этого он переводится в машинный код — то, что понимает процессор — во время выполнения.

«JIT» — это метод, который компилирует части кода во время выполнения так, что вместо этого можно использовать скомпилированную версию.

Думайте об этом как о «кэшированной версии» интерпретируемого кода, сгенерированного во время выполнения.

Подробнее об этом уже писали на Хабре


Пять

$triggerError = fn() => throw new MyError(); $foo = $bar['offset'] ?? throw new OffsetDoesNotExist('offset');

throw может быть использован в выражениях.


Шесть

try { // Something goes wrong} catch (MySpecialException) { Log::error("Something went wrong");}

Можно не указывать переменную исключения, если она вам не нужна.


Семь

public function( string $parameterA, int $parameterB, Foo $objectfoo,) { // …}

В конце списка параметров можно указать запятую.


Восемь

str_contains('string with lots of words', 'words'); str_starts_with('haystack', 'hay'); str_ends_with('haystack', 'stack');

Новые строковые функции. Я думаю, их название говорит само за себя

Давайте не будем обманывать себя: 8 блоков кода недостаточно для суммирования всех замечательных новых вещей в PHP 8. Итак, давайте просто добавим еще несколько.


Девять

function bar(Stringable $stringable) { /* … */ }

Новый Stringable interface, который автоматически добавляется в классы, которые реализуют метод __toString ().


Десять

$object::class

Вызов ::class сразу из объекта.


Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть