Hướng dẫn php 8.1 fibers - php 8.1 sợi

Hôm qua (26/11/2021), PHP 8.1 đã được release với một loạt các tính năng mới như: enum, read only roperty, fibers,... và cải thiệt rất nhiều về mặt hiệu năng.

Nội dung chính

  • 1. Enumerations.
  • 2. Readonly Properties.
  • 3. First-class Callable.
  • 4. Initializers.
  • 5. Pure Intersection Type.
  • 6. Nerver return type.
  • 7. Final class constants.
  • 9. Array unpacking - hỗ trợ mảng bất tuần tự.
  • 10. Cải tiến về mặt hiệu năng.

Bài viết này mình sẽ liệu kê ra một số feature mới nổi bật trong PHP 8.1

1. Enumerations.

2. Readonly Properties.

3. First-class Callable.

4. Initializers.: PHP < 8.1

class Status
{
    const DRAFT = 'draft';
    const PUBLISHED = 'published';
    const ARCHIVED = 'archived';
}

function acceptStatus(string $status) {...}

5. Pure Intersection Type.

enum Status
{
    case Draft;
    case Published;
    case Archived;
}

function acceptStatus(Status $status) {...}

6. Nerver return type.

2. Readonly Properties.

3. First-class Callable.

4. Initializers.

5. Pure Intersection Type.: định nghĩa thuộc tính

enum Status
{
    case Draft;
    case Published;
    case Archived;
}

function acceptStatus(Status $status) {...}
9 là readonly.

class BlogData
{
    public readonly Status $status;
}

6. Nerver return type.

class BlogData
{
    public readonly Status $status;

    public function __construct(Status $status)
    {
        $this->status = $status;
    }
}

3. First-class Callable.

4. Initializers.

5. Pure Intersection Type.: Đối với PHP < 8.1

class Foo
{
    public function bar(): string
    {
        return 'bar method';
    }
}

$bar = [new Foo(), 'bar'];

$bar(); // bar method

$fn = Closure::fromCallable('strlen');

$fn("ABC"); // 3

6. Nerver return type.

<?php

class Foo
{
    public function bar(): string
    {
        return 'bar method';
    }
}

$bar = (new Foo())->bar(...);

$bar(); // bar method

$fn = strlen(...);

$fn("ABC"); // 3

4. Initializers.

5. Pure Intersection Type.

VD::

class Service
{
    private Logger $logger;

    public function __construct(
        Logger $logger = new NullLogger(),
    ) {
        $this->logger = $logger;
    }
}

5. Pure Intersection Type.

6. Nerver return type.

7. Final class constants.: Đối với PHP < 8.1 nếu như chúng ta muốn parameter bắt buộc phải vừa implement Interator và Countable thì sẽ phải làm như sau:

function count_and_iterate(Iterator $value) {
    if (!($value instanceof Countable)) {
        throw new TypeError('value must be Countable');
    }

    foreach ($value as $val) {
        echo $val;
    }

    count($value);
}

9. Array unpacking - hỗ trợ mảng bất tuần tự.

VD::

function count_and_iterate(Iterator&Countable $value) {
    foreach ($value as $val) {
        echo $val;
    }

    count($value);
}

6. Nerver return type.

7. Final class constants.

9. Array unpacking - hỗ trợ mảng bất tuần tự.

10. Cải tiến về mặt hiệu năng.:

function redirect(string $uri): never {
    header('Location: ' . $uri);
    exit();
}

function redirectToLoginPage(): never {
    redirect('/login');
    echo 'Hello'; // Nếu khai báo như này thì code vẫn chạy nhưng các IDE inspector, static analysis sẽ báo lỗi
}

7. Final class constants.

9. Array unpacking - hỗ trợ mảng bất tuần tự.

10. Cải tiến về mặt hiệu năng.:

enum Status
{
    case Draft;
    case Published;
    case Archived;
}

function acceptStatus(Status $status) {...}
0

Bài viết này mình sẽ liệu kê ra một số feature mới nổi bật trong PHP 8.1

Nếu như các bạn đã từng sử dụng các ngôn ngữ khác như:

enum Status
{
    case Draft;
    case Published;
    case Archived;
}

function acceptStatus(Status $status) {...}
4,
enum Status
{
    case Draft;
    case Published;
    case Archived;
}

function acceptStatus(Status $status) {...}
5,... thì chắc hẳn các bạn cũng biết đến
enum Status
{
    case Draft;
    case Published;
    case Archived;
}

function acceptStatus(Status $status) {...}
6 rồi.

Enum là một kiểu dữ liệu đặc biệt, enum chứa một tập hợp các hằng số được xác định trước. Thay vì các bạn phải khai báo các const trong class như trước thì bạn có thể khai báo chúng vào một enum cho dễ quản lí.

VD: PHP < 8.1

Giờ đây từ PHP 8.1 trở đi bạn có thể đặt nó trong

enum Status
{
    case Draft;
    case Published;
    case Archived;
}

function acceptStatus(Status $status) {...}
6 như sau:

Để hiểu rõ hơn về

enum Status
{
    case Draft;
    case Published;
    case Archived;
}

function acceptStatus(Status $status) {...}
6 trong PHP các bạn có thể tham khảo tại đây.: Mình sẽ demo một ví dụ cơ bản với fiber

enum Status
{
    case Draft;
    case Published;
    case Archived;
}

function acceptStatus(Status $status) {...}
1

Ở phiên bản này PHP cung cấp thêm một loại thuộc tính chỉ được phép đọc mà không được phép ghi khi class đã được khởi tạo.

enum Status
{
    case Draft;
    case Published;
    case Archived;
}

function acceptStatus(Status $status) {...}
2

Nếu bạn muốn một thuộc tính chỉ được phép đọc thì chỉ cần thêm keyword readonly vào sau visibility của thuộc tính đó.

VD: định nghĩa thuộc tính

enum Status
{
    case Draft;
    case Published;
    case Archived;
}

function acceptStatus(Status $status) {...}
9 là readonly.

9. Array unpacking - hỗ trợ mảng bất tuần tự.

10. Cải tiến về mặt hiệu năng.

VD::

enum Status
{
    case Draft;
    case Published;
    case Archived;
}

function acceptStatus(Status $status) {...}
3

10. Cải tiến về mặt hiệu năng.

Bài viết này mình sẽ liệu kê ra một số feature mới nổi bật trong PHP 8.1

Nếu như các bạn đã từng sử dụng các ngôn ngữ khác như:

enum Status
{
    case Draft;
    case Published;
    case Archived;
}

function acceptStatus(Status $status) {...}
4,
enum Status
{
    case Draft;
    case Published;
    case Archived;
}

function acceptStatus(Status $status) {...}
5,... thì chắc hẳn các bạn cũng biết đến
enum Status
{
    case Draft;
    case Published;
    case Archived;
}

function acceptStatus(Status $status) {...}
6 rồi.