Памятка: версии PHP со списком своих изменений, которые заслуживают внимания. К некоторым изменениям добавлены пояснения/примеры, чтобы быстро освежить в памяти о чём речь в неочевидных пунктах.
Nullable Types
Iterable and Void Returns
Multi-Catch Exception Handling
Keys Can Now Be Used in Lists
More Negative String Offsets
Number Operators And Malformed Numbers
class constant visibility
New object Type
Allow Abstract Method Overriding
Устарел mbstring.func_overload
Смягчение требований к синтаксису Heredoc и Nowdoc
Поддержка конечных запятых в вызовах функций и методов
Ссылки в list()
Опциональный выброс исключений при ошибках в функциях json_encode и json_decode JSON_THROW_ON_ERROR
Добавление функции is_countable()
Добавление функций array_key_first() и array_key_last()
Arrow functions for cleaner one-liner functions array_map(fn (User $user) => $user->id, $users)
Typed properties in classes public ?Foo $foo;
Improved type variance дочерний класс может возвращать более конкретный экземпляр
The null coalescing assignment operator as a shorthand $data['date'] ??= new DateTime();
Underscores can be used to format numeric values $formattedNumber = 107_925_284.88;
Spread operator in arrays [0, ...$arrayA, ...$arrayB, 6 ,7];
Named arguments htmlspecialchars($string, double_encode: false);
Attributes #[Route("/api/posts/{id}", methods: ["GET"])] Instead of PHPDoc annotations, you can now use structured metadata with PHP's native syntax.
Constructor property promotion public function __construct( public float $x = 0.0, public float $y = 0.0, ) {}
Union types private int|float $number
Match expression The new match is similar to switch Match is an expression, meaning its result can be stored in a variable or returned.
Nullsafe operator $country = $session?->user?->getAddress()?->country;
str_contains(), str_starts_with(), str_ends_with()
https://www.php.net/releases/8.0/ru.php
Enumerations enum Status { case Draft; case Published; case Archived; }
Readonly Properties public readonly Status $status;
First-class Callable Syntax $foo = $this->foo(...); $fn = strlen(...);
Objects can now be used as default parameter values, static variables, and global constants, as well as in attribute arguments. public function __construct( Logger $logger = new NullLogger(), )
Pure Intersection Types function count_and_iterate(Iterator&Countable $value) {
Never return type function redirect(string $uri): never {
Final class constants final public const XX = "foo";
Fibers ^_^ https://www.php.net/releases/8.1/en.php#fibers Fibers are primitives for implementing lightweight cooperative concurrency.
https://www.php.net/releases/8.1/ru.php
Readonly classes readonly class BlogData
Disjunctive Normal Form (DNF) Types public function bar((A&B)|null $entity) {
Allow null, false, and true as stand-alone types
New "Random" extension object-oriented API to random number generation
Constants in traits
Deprecate dynamic properties
https://www.php.net/releases/8.2/ru.php
Typed class constants const string PHP = 'PHP 8.3';
Dynamic class constant fetch Вместо этого: constant(Foo::class . '::' . $name) Можно теперь делать так: Foo::{$name};
New #[\Override] attribute Fatal error: MyTest::taerDown() has #[\Override] attribute, but no matching parent method exists
Deep-cloning of readonly properties
New json_validate() function
New Randomizer::getBytesFromString() method
New Randomizer::getFloat() and Randomizer::nextFloat() methods
Command line linter supports multiple files
https://www.php.net/releases/8.3/ru.php
Иллюстрация сгенерирована с помощью giga.chat - большое человеческое спасибо ему и его разработчикам, видно что старались...
Запрос: Иллюстрация к статье про изменения в PHP с 7.1 по 8.3. На иллюстрации должен присутствовать текст: "PHP с 7.1 по 8.3"