Ключевые изменения версий PHP с 7.1 по 8.3 [cheatsheet]

15.11.2024

Памятка: версии PHP со списком своих изменений, которые заслуживают внимания. К некоторым изменениям добавлены пояснения/примеры, чтобы быстро освежить в памяти о чём речь в неочевидных пунктах.

 

PHP 7.1

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

PHP 7.2

New object Type
Allow Abstract Method Overriding
Устарел mbstring.func_overload

PHP 7.3

Смягчение требований к синтаксису Heredoc и Nowdoc
Поддержка конечных запятых в вызовах функций и методов
Ссылки в list()
Опциональный выброс исключений при ошибках в функциях json_encode и json_decode         JSON_THROW_ON_ERROR
Добавление функции is_countable()
Добавление функций array_key_first() и array_key_last()

PHP 7.4

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];

PHP 8.0

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

PHP 8.1

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

PHP 8.2

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

PHP 8.3

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"


Теги: php cheatsheet