Вийшов реліз PHP 8, що нового?


Вийшов реліз PHP 8, що нового?

Команда розробників PHP учора оголосила про випуск PHP 8:

PHP 8.0 - це основне оновлення мови PHP.
Він містить багато нових функцій та оптимізацій, включаючи іменовані аргументи, типи об’єднань, атрибути, просування властивостей конструктора, вираз збігу, nullsafe-оператор, JIT, а також вдосконалення в системі типів, обробку помилок та узгодженість.

Ось список основних нових функцій:

Ось деякі основні моменти з анонсу оновлення: 

/ PHP 7
htmlspecialchars ($ рядок, ENT_COMPAT | ENT_HTML401, 'UTF-8', помилковий);

 // PHP 8
 // Вкажіть лише обов’язкові параметри, пропускаючи необов’язкові.
 // Аргументи не залежать від запиту та самодокументуються.
htmlspecialchars ($ рядок, double_encode: false);

Атрибути PHP 8

Замість анотацій PHPDoc тепер ви можете використовувати структуровані метадані з власним синтаксисом PHP.

// PHP 7
class PostsController
{
    /**
     * @Route("/api/posts/{id}", methods={"GET"})
     */
    public function get($id) { /* ... */ }
}

// PHP 8
class PostsController
{
    #[Route("/api/posts/{id}", methods: ["GET"])]
    public function get($id) { /* ... */ }
}

PHP 8 Впровадження власного конструктора

Менше типового коду для визначення та ініціалізації властивостей.

// PHP 7
class Point {
  public float $x;
  public float $y;
  public float $z;

  public function __construct(
    float $x = 0.0,
    float $y = 0.0,
    float $z = 0.0,
  ) {
    $this->x = $x;
    $this->y = $y;
    $this->z = $z;
  }
}

// PHP 8
class Point {
  public function __construct(
    public float $x = 0.0,
    public float $y = 0.0,
    public float $z = 0.0,
  ) {}
}

PHP 8 Типи об'єднань

Замість анотацій PHPDoc для комбінації типів ви можете використовувати декларації власного типу об’єднання, які перевіряються під час виконання.

// PHP 7
class Number {
  /** @var int|float */
  private $number;

  /**
   * @param float|int $number
   */
  public function __construct($number) {
    $this->number = $number;
  }
}

new Number('NaN'); // Ok

// PHP 8
class Number {
  public function __construct(
    private int|float $number
  ) {}
}

new Number('NaN'); // TypeError

PHP 8 Nullsafe оператор

Замість умов нульової перевірки тепер ви можете використовувати ланцюжок викликів з новим безпечним оператором.  Коли оцінка одного елемента в ланцюжку не вдається, виконання всього ланцюга переривається, і весь ланцюжок вважається нулем.

// PHP 7
$country =  null;

if ($session !== null) {
  $user = $session->user;

  if ($user !== null) {
    $address = $user->getAddress();

    if ($address !== null) {
      $country = $address->country;
    }
  }
}

// PHP 8
$country = $session?->user?->getAddress()?->country

PHP 8 Вираз відповідності

Новий збіг схожий на перемикач і має такі особливості:

// PHP 7
перемикач (8.0) {
   справа '8.0':
     $ result = "О ні!";
     перерву;
   випадок 8.0:
     $ result = "Це я очікував";
     перерву;
 }
echo $ результат;
 //> О ні!

 // PHP 8
echo match (8.0) {
   '8.0' => "О ні!",
   8.0 => "Це те, що я очікував",
 };
 //> Це те, що я очікував

Звичайно, це лише основні моменти. Щоб дізнатись усі деталі треба ознайомитись з офіційним повідомленням про реліз.

Джерело