- vừa được xem lúc

PHP 8.0 có gì mới ?

0 0 4

Người đăng: Phung Van Thuc

Theo Viblo Asia

I: Lời mở đầu.

Mới đây php phiên bản 8.0 đã được chính thức phát hành, theo các chuyên gia thì php có khá nhiều công nghệ đột phá nhằm tăng tính liên kết và cải thiện tốc độ xử lý. Vậy chúng ta cùng nhau tìm hiểu xem php8.0 có gì khác mới mẻ.

I: Các tính năng mới.

1: Union types.

Với bản chất được định kiểu động của PHP, có rất nhiều trường hợp mà kiểu liên hợp có thể hữu ích. Nói một các đơn thuần thì ta có thể set nhiều kiểu dữ liệu cho đầu vào và đầu ra của function.

public function foo(Foo|Bar $input): int|float;

Nhưng Lưu ý rằng void không bao giờ có thể là union type, vì nó chỉ ra "no return value at all". Hơn nữa, nullable các hợp nhất có thể được viết bằng cách sử dụng |null hoặc bằng cách sử dụng ?ký hiệu hiện có :

public function foo(Foo|null $foo): void; public function bar(?Bar $bar): void;

2: JIT

Trình biên dịch JIT - đúng lúc - hứa hẹn sẽ cải thiện hiệu suất đáng kể, mặc dù không phải lúc nào cũng nằm trong ngữ cảnh của các yêu cầu web. Tôi đã thực hiện các điểm benchmarks trên các ứng dụng web ngoài đời thực và có vẻ như JIT không tạo ra nhiều sự khác biệt, nếu có, trên các loại dự án PHP đó.

Bạn có thể tìm hiểu thêm về JIT ở đây.

3: Toán tử nullsafe

Nếu bạn đã quen thuộc với toán tử liên kết null, bạn đã quen với những thiếu sót của nó: nó không hoạt động trên các cuộc gọi phương thức. Thay vào đó, bạn cần kiểm tra trung gian hoặc dựa vào optional người trợ giúp được cung cấp bởi một số khuôn khổ:

$startDate = $booking->getStartDate(); $dateAsString = $startDate ? $startDate->asDateTimeString() : null;

Với việc bổ sung toán tử nullsafe, bây giờ chúng ta có thể có hành vi giống như liên kết null trên các phương thức!

$dateAsString = $booking->getStartDate()?->asDateTimeString();

Bạn có thể đọc tất cả về toán tử nullsafe tại đây .

4: Gán giá trị tham số.

Các đối số được đặt tên cho phép bạn chuyển các giá trị vào một hàm, bằng cách chỉ định tên giá trị, do đó bạn không phải xem xét thứ tự của chúng và bạn cũng có thể bỏ qua các tham số tùy chọn!


function foo(string $a, string $b, ?string $c = null, ?string $d = null) { /* … */ } foo( b: 'value b', a: 'value a', d: 'value d',
);

5: Attributes

Các thuộc tính , thường được gọi là chú thích trong các ngôn ngữ khác, cung cấp một cách để thêm dữ liệu meta vào các lớp mà không cần phải phân tích cú pháp docblocks.

Để xem nhanh, đây là một ví dụ về các thuộc tính trông như thế nào, từ RFC:


use App\Attributes\ExampleAttribute; #[ExampleAttribute]
class Foo
{ #[ExampleAttribute] public const FOO = 'foo'; #[ExampleAttribute] public $x; #[ExampleAttribute] public function foo(#[ExampleAttribute] $bar) { }
}
#[Attribute]
class ExampleAttribute
{ public $value; public function __construct($value) { $this->value = $value; }
}

Lưu ý rằng cơ sở này Attributetừng được gọi PhpAttributetrong RFC ban đầu, nhưng sau đó đã được thay đổi bằng một RFC khác .

6: Match expression

Bạn có thể gọi nó là anh cả của switch biểu thức: match có thể trả về giá trị, không yêu cầu break câu lệnh, có thể kết hợp điều kiện, sử dụng so sánh kiểu nghiêm ngặt và không thực hiện bất kỳ sự ép buộc kiểu nào.

Nó trông như thế này:

$result = match($input) { 0 => "hello", '1', '2', '3' => "world",
};

7: Constructor property promotion

RFC này bổ sung thêm đường cú pháp để tạo các đối tượng giá trị hoặc đối tượng truyền dữ liệu. Thay vì chỉ định các thuộc tính của lớp và một hàm tạo cho chúng, PHP giờ có thể kết hợp chúng thành một.

Thay vì làm như này:

class Money { public Currency $currency; public int $amount; public function __construct( Currency $currency, int $amount, ) { $this->currency = $currency; $this->amount = $amount; }
}

Bây giờ bạn có thể làm như sau:

class Money { public function __construct( public Currency $currency, public int $amount, ) {}
}

8: New static return type

Mặc dù đã có thể trả về self, nhưng static không phải là kiểu trả về hợp lệ cho đến PHP 8. Với bản chất được nhập động của PHP, đây là một tính năng sẽ hữu ích cho nhiều nhà phát triển.

class Foo
{ public function test(): static { return new static(); }
}

9: New mixed type

Một số người có thể gọi nó là một tội ác cần thiết: mixed loại khiến nhiều người có cảm xúc lẫn lộn. Tuy nhiên, có một lập luận rất tốt để giải quyết vấn đề này: một loại bị thiếu có thể có nhiều ý nghĩa trong PHP:

  • Một hàm không trả về gì hoặc null
  • Chúng tôi đang mong đợi một trong nhiều loại
  • Chúng tôi đang mong đợi một kiểu không thể nhập được gợi ý trong PHP

Bởi vì những lý do trên, đó là một điều tốt mà mixed loại được thêm vào. mixed bản thân nó có nghĩa là một trong những loại sau:

  • array
  • bool
  • callable
  • int
  • float
  • null
  • object
  • resource
  • string

Lưu ý rằng nó mixed cũng có thể được sử dụng như một tham số hoặc kiểu thuộc tính, không chỉ như một kiểu trả về.

Cũng lưu ý rằng vì mixed đã bao gồm null, nên không được phép làm cho nó có giá trị vô hiệu. Điều sau sẽ gây ra lỗi:

// Fatal error: Mixed types cannot be nullable, null is already part of the mixed type.
function bar(): ?mixed {}

10: Throw expression

RFC này thay đổi throw từ một câu lệnh thành một biểu thức, điều này làm cho nó có thể đưa ra ngoại lệ ở nhiều vị trí mới:

$triggerError = fn () => throw new MyError(); $foo = $bar['offset'] ?? throw new OffsetDoesNotExist('offset');

11: Non-capturing catches

Với các phiên bản cũ chúng ta viết catch như này:

try { // Something goes wrong
} catch (MySpecialException $exception) { Log::error("Something went wrong");
}

Với phiên bản 8.0 chúng ta chỉ cần viết như này:

try { // Something goes wrong
} catch (MySpecialException) { Log::error("Something went wrong");
}

III: Tổng kết.

Trên mình đã nói đến 11 thay đổi mình nghĩ chúng ta hay dùng. Còn một số thay đổi nữa mình sẽ update vào bài viết sau. thanks!

IV: Tham khảo.

https://stitcher.io/blog/new-in-php-8

Bình luận

Bài viết tương tự

- vừa được xem lúc

Cài đặt WSL / WSL2 trên Windows 10 để code như trên Ubuntu

Sau vài ba năm mình chuyển qua code trên Ubuntu thì thật không thể phủ nhận rằng mình đã yêu em nó. Cá nhân mình sử dụng Ubuntu để code web thì thật là tuyệt vời.

0 0 376

- vừa được xem lúc

Phân quyền đơn giản với package Laravel permission

Như các bạn đã biết, phân quyền trong một ứng dụng là một phần không thể thiếu trong việc phát triển phần mềm, dù đó là ứng dụng web hay là mobile. Vậy nên, hôm nay mình sẽ giới thiệu một package có thể giúp các bạn phân quyền nhanh và đơn giản trong một website được viết bằng PHP với framework là L

0 0 421

- vừa được xem lúc

Sử dụng Swagger để xây dựng API documentation

Giới thiệu về Swagger. RESTful API là một tiêu chuẩn dùng trong việc thiết kế API cho các ứng dụng web (thiết kế Web services) để tiện cho việc quản lý các resource.

0 0 1k

- vừa được xem lúc

So sánh Interface và Abstract trong lập trình hướng đối tượng.

Tổng quan. Interface và Abstract class là 2 khái niệm cơ bản trong lập trình OOP.

0 0 49

- vừa được xem lúc

CURL và cách sử dụng trong PHP

Giới Thiệu. CURL là bộ thư viện được sử dụng để giúp thực hiện việc chuyển dữ liệu thông qua nhiều giao thức khác nhau (như HTTP, FPT...). Với giao thức HTTP, cURL hỗ trợ việc gửi dữ liệu sử dụng tất cả các phương thức hiện có như GET, POST, PUT, DELETE... cURL cũng hỗ trợ việc chuyền dữ liệu sử dụn

0 0 81

- vừa được xem lúc

Thêm dòng dữ liệu mới (MySQL) trong Laravel

Chào các bạn, Laravel hiện đang là hot trend trong "thế giới PHP". 1. Cấu hình cơ bản ban đầu. .

0 0 38