WHAT IS NEW IN PHP8?

PHP 8.0 has a major update in the PHP language.

It contains many new features and optimizations including named arguments, union types, attributes, constructor property promotion, match expression, null safe operator, JIT, and improvements in the type of the system, error handling, and consistency.

Let’s see difference between PHP7 and PHP8

                    Named arguments 
 

Named arguments allow passing arguments to a function based on the parameter name, rather than the parameter position. This makes the meaning of the argument self-documenting, makes the arguments order-independent, and allows skipping default values arbitrarily.

PHP7PHP8
htmlspecialchars($string, ENT_COMPAT | ENT_HTML401, ‘UTF-8’, false);htmlspecialchars($string, double_encode: false);

Attributes

This RFC proposes Attributes as a form of structured, syntactic metadata to declarations of classes, properties, functions, methods, parameters and constants. Attributes allow to define configuration directives directly embedded with the declaration of that code.

PHP7PHP8
class PostsController
{
    /**
     * @Route(“/api/posts/{id}”, methods={“GET”})
     */
    public function get($id) { /* … */ }
}
class PostsController
{
    #[Route(“/api/posts/{id}”, methods: [“GET”])]
    public function get($id) { /* … */ }
}

Constructor property promotion

Currently, the definition of simple value objects requires a lot of boilerplate, because all properties need to be repeated at least four times. Consider the following simple class:

PHP7PHP8
lass 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;
  }
}
class Point {
  public function __construct(
    public float $x = 0.0,
    public float $y = 0.0,
    public float $z = 0.0,
  ) {}
}

Union types

A “union type” accepts values of multiple different types, rather than a single one. PHP already supports two special union types:

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

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

new Number(‘NaN’); // Ok
class Number {
  public function __construct(
    private int|float $number
  ) {}
}

n

 

Comments