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, может комбинировать условия, использует строгие сравнения типов и не выполняет никакого принуждения типов.