PHP 8. Новинки языка и программы для работы с ним - страница 3

Шрифт
Интервал


public function foo (Foo|null $foo): void;

public function bar (?Bar $bar): void;

JIT

JIT – just in time-компилятор обещает значительное повышение производительности, хотя и не всегда в контексте веб-запросов. Мне кажется, что JIT не имеет большого значения, если вообще имеет значение для PHP-проектов.

Нулевой безопасный оператор

Если вы знакомы с оператором слияния null, вы уже знакомы с его недостатками: он не работает при вызовах методов. Вместо этого вам нужны промежуточные проверки или полагайтесь на необязательных помощников, предоставляемых некоторыми фреймворками:

$startDate = $booking-> getStartDate ();

$dateAsString = $startDate? $startDate-> asDateTimeString (): null;

С добавлением нулевого безопасного оператора мы теперь можем иметь нулевое коалесцирующее поведение на методах!

$dateAsString = $booking-> getStartDate ()? -> asDateTimeString ();

Именованные аргументы

Именованные аргументы позволяют передавать значения функции, указывая имя значения, так что вам не нужно принимать во внимание их порядок, а также вы можете пропустить необязательные параметры!

function foo (string $a, string $b,?string $c = null,?string $d = null) {/* … */}

foo (b: ’value b’, a: ’value a’, d: ’value d’,);

Атрибуты

Атрибуты, обычно известные как аннотации на других языках, предлагают способ добавления метаданных в классы без необходимости разбора docblocks.

Что касается быстрого взгляда, вот пример того, как выглядят атрибуты, из RFC:

use App\Attributes\ExampleAttribute;

@@ExampleAttribute class Foo

{

@@ExampleAttribute public const FOO = ’foo’;

@@ExampleAttribute public $x;

@@ExampleAttribute public function foo (

@@ExampleAttribute $bar) {}

}

@@Attribute class ExampleAttribute {

public $value; public function __construct ($value) {$this-> value = $value;

}

}

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

Также обратите внимание, что синтаксис атрибута все еще может измениться, он все еще не определен.

Выражение соответствия

Вы можете назвать его старшим братом выражения switch: match может возвращать значения, не требует операторов break, может комбинировать условия, использует строгие сравнения типов и не выполняет никакого принуждения типов.