Hướng dẫn what is the difference between php 8 and 7? - sự khác biệt giữa php 8 và 7 là gì?

Php 8 mang đến một loạt các tính năng mới cải tiến, chức năng và khấu hao cho ngôn ngữ so với PHP 7. Trong số tất cả các tính năng mới này, trình biên dịch JIT là người chia sẻ ánh đèn sân khấu. Tuy nhiên, các tính năng khác như thay đổi cú pháp cũng được tính đến vì chính các tính năng này sẽ có tác động lớn hơn đến các học viên.

Vì có nhiều thay đổi quan trọng mà chúng tôi muốn nói, vì vậy chúng tôi đã chia blog này thành nhiều phần. Đây là phần 1 của loạt bài.

Các vấn đề với mã cũ:

Với Php 8, chúng ta không còn xem xét rằng nó sẽ tương thích ngược vì nó có một gói thay đổi cú pháp. Những thay đổi mới nhất bao gồm:

  • Di sản trích dẫn ma thuật
  • Loại thực
  • Phương pháp phản ánh () Phương pháp
  • Mở ra $ điều này từ các đóng cửa không tĩnh
  • Iliverod () hỗn hợp thứ tự tham số
  • hàm hebrevc ()
  • mb_strrpos () với mã hóa dưới dạng đối số thứ 3
  • hàm money_format ()
  • hàm convert_cyr_string ()
  • cho phép_url_include trong Chỉ thị
  • RESTORE_INCLUDE_PATH () hàm

Chúng ta hãy xem các tính năng Php 8 chính:

Các chức năng mới

str_contains()

Khi cố gắng tìm hiểu xem một chuỗi có phải là một phần của một chuỗi khác hay không, bạn thường sẽ sử dụng str_pos () sử dụng kim trong khái niệm haystack. Nó trả về một số nguyên hiển thị vị trí đầu tiên mà bạn nhìn thấy kim. Khi nó trả lại vị trí của một chuỗi, bạn chỉ đơn giản là không thể kiểm tra xem có phải strpos () đã phát hiện ra nó hay không; Nếu nó trả về trên 0 0 (các vị trí không được chỉ số bằng không và bắt đầu bằng 0 thay vì 1), thì điều kiện sẽ coi nó là một giá trị sai, và chỉ ra rằng nó đã được tìm thấy. & NBSP;

Điều này có nghĩa là bạn sẽ phải bọc nó trong một điều kiện như là Strpos ($ Haystack, $ kim)! == Sai. Trong đó sai chỉ ra rằng nó không thể tìm thấy vị trí chuỗi. & Nbsp;

Để chống lại điều này, Php 8 giới thiệu str_contains (), trả về một boolean đơn giản cho biết liệu kim có mặt trong đống cỏ khô hay không.

Vì vậy, thay vì làm điều này:

if (strpos('string with lots of words', 'words') !== false) { /* … */ }

Bây giờ bạn sẽ làm điều này:

if (str_contains('string with lots of words', 'words')) { /* … */ }

str_starts_with () và str_ends_with () hàm::

Các chức năng này hiện được kết hợp vào cốt lõi:

str_starts_with('haystack', 'hay'); // true
str_ends_with('haystack', 'stack'); // true

hàm fdiv ()

Hàm fdiv () mới thực hiện một cái gì đó tương tự như các hàm fmod () và intdiv (), cho phép phân chia theo 0. thay vì lỗi, bạn sẽ nhận

Chức năng get_debug_type ():

Hàm get_debug_type () trả về loại biến. get_debug_type () trả về đầu ra hữu ích hơn cho các mảng, chuỗi, các lớp ẩn danh và đối tượng. Chắc chắn có vẻ như gettype () nhưng có những lợi ích của sau này. & NBSP;

Ví dụ: gọi getType () trên lớp \ foo \ thanh sẽ trả về đối tượng. Sử dụng get_debug_type () sẽ trả về tên lớp.

Hàm get_resource_id ():

Tài nguyên là các biến đặc biệt trong PHP, đề cập đến các tài nguyên bên ngoài. Một ví dụ là kết nối MySQL, một fileHandle khác.

Mỗi một trong số các tài nguyên đó được gán một ID, mặc dù trước đây là cách duy nhất để biết rằng ID là chuyển tài nguyên cho Int:

$resourceId = (int) $resource;

Php 8 thêm các hàm get_resource_id (), làm cho hoạt động này rõ ràng hơn và an toàn loại:

$resourceId = get_resource_id($resource);

Có tên là đối 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ị, để 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',
);

Thuộc tính của hàm tạo

Thay đổi cú pháp này cho phép chúng tôi tạo các đối tượng truyền dữ liệu. Thay vì chỉ định các thuộc tính lớp và hàm tạo cho chúng, giờ đây PHP hiện có thể kết hợp chúng thành một.

Vì vậy, thay vì làm điều 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 sẽ làm điều này:

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

str_starts_with () và str_ends_with () hàm:fetched programmatically with PHP Reflection API.

#[CustomAttribute]
class Foo {
    #[AnotherAttribute(42)]
    public function bar(): void {}
}

Các chức năng này hiện được kết hợp vào cốt lõi:


hàm fdiv ()

Hàm fdiv () mới thực hiện một cái gì đó tương tự như các hàm fmod () và intdiv (), cho phép phân chia theo 0. thay vì lỗi, bạn sẽ nhận

Chức năng get_debug_type ():

$startDate = $booking->getStartDate();

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

Hàm get_debug_type () trả về loại biến. get_debug_type () trả về đầu ra hữu ích hơn cho các mảng, chuỗi, các lớp ẩn danh và đối tượng. Chắc chắn có vẻ như gettype () nhưng có những lợi ích của sau này. & NBSP;

if (str_contains('string with lots of words', 'words')) { /* … */ }
0

Ví dụ: gọi getType () trên lớp \ foo \ thanh sẽ trả về đối tượng. Sử dụng get_debug_type () sẽ trả về tên lớp.

Hàm get_resource_id ():

if (str_contains('string with lots of words', 'words')) { /* … */ }
1

Lưu ý rằng void không bao giờ có thể là một phần của loại liên minh vì nó chỉ ra "hoàn toàn không có giá trị trả về". Hơn nữa, các công đoàn vô hiệu có thể được viết bằng cách sử dụng | null, hoặc bằng cách sử dụng hiện tại? ký hiệu:

if (str_contains('string with lots of words', 'words')) { /* … */ }
2
if (str_contains('string with lots of words', 'words')) { /* … */ }
3

Trình biên dịch JIT

Php Opcache hỗ trợ JIT. Nó bị vô hiệu hóa theo mặc định và nếu được bật, JIT biên dịch và lưu trữ hướng dẫn gốc. Nó không tạo ra sự khác biệt đáng chú ý trong các ứng dụng web ràng buộc IO nhưng cung cấp hiệu suất tăng cho các ứng dụng nặng CPU.

if (str_contains('string with lots of words', 'words')) { /* … */ }
4

Đọc phần 2 của blog ở đây.

Sự khác biệt giữa PHP 7 và PHP 8 là gì?

Sự khác biệt giữa PHP 7.4 và 8 là gì?Trả lời: Một trong nhiều ví dụ là, WordPress trên Php 8.0 có thể xử lý nhiều yêu cầu hơn 18,4% mỗi giây so với Php 7.4.Hơn nữa, Laravel trên PHP 8.0 có thể chạy thêm 8,5% yêu cầu mỗi giây so với Php 7.3.WordPress on PHP 8.0 can handle 18.4% more requests per second than PHP 7.4. Moreover, Laravel on PHP 8.0 can run 8.5% more requests per second than PHP 7.3.

Php 8.0 có tốt không?

Đây là một trong những ngôn ngữ lập trình phổ biến nhất thế giới, được sử dụng bởi các nhà phát triển web trên toàn cầu.Với Php 8, có một số tính năng mới giúp nó phù hợp với các ứng dụng doanh nghiệp quy mô lớn, bao gồm các dịch vụ web và dịch vụ vi mô và các ứng dụng chạy trên đám mây.a great fit for large-scale enterprise applications, including web services and micro-services, and applications that run on the cloud.

Php 8.1 có tốt hơn không?

Php 8.1 là nhanh nhất với Codeigniter, thực hiện các yêu cầu nhiều hơn 8,48% mỗi giây so với Php 8.0., performing 8.48% more requests per second than PHP 8.0.

Php 8 nhanh hơn bao nhiêu?

Php 7.0 cung cấp một mức tăng hiệu suất đáng kinh ngạc so với Php 5.6, làm cho ngôn ngữ nhanh hơn gần 40% trên một số điểm chuẩn.Php 8 nhanh gấp đôi so với PHP 5.6 trên một số nhiệm vụ.about twice as fast as PHP 5.6 on some tasks.