PHP – Deprecated Features

Khi một số tính năng mới được thêm vào với mỗi phiên bản mới, một số tính năng cũng bị loại bỏ vì chúng được coi là lỗi thời. Trong chương này, chúng ta sẽ xem xét các tính năng đã bị ngừng hỗ trợ sau phiên bản PHP 5.

Deprecated in PHP Ver 7

PHP 4 Style Constructors

Các phương thức khởi tạo theo kiểu PHP 4 có cùng tên với lớp mà chúng được định nghĩa trong đó hiện đã bị lDeprecated và sẽ bị loại bỏ trong tương lai. PHP 7 sẽ phát sinh E_DEPRECATED nếu một phương thức khởi tạo theo kiểu PHP 4 là phương thức khởi tạo duy nhất được định nghĩa trong một lớp. Các lớp triển khai phương thức __construct() sẽ không bị ảnh hưởng.

Example

Hãy xem xét ví dụ sau −

<?php
   class A {
      function A() {
         print('Style Constructor');
      }
   }
?>

Nó tạo ra output trên trình duyệt −

Deprecated: Methods with the same name as their class will not be 
constructors in a future version of PHP; A has a deprecated constructor in...

Static Calls to Non-static Methods

Các cuộc gọi tĩnh đến các phương thức không tĩnh đã bị ngừng sử dụng và có thể bị loại bỏ trong tương lai.

Example

Hãy xem xét ví dụ sau −

<?php
   class A {
      function b() {
         print('Non-static call');
      }
   }
   A::b();
?>

Nó tạo ra output trên trình duyệt −

Deprecated: Non-static method A::b() should not be called statically in...
Non-static call

password_hash() salt option

Tùy chọn salt cho hàm password_hash() đã bị loại bỏ để các nhà phát triển không tự tạo ra các salt (thường không an toàn) của riêng họ. Hàm này tự động tạo ra một salt an toàn về mặt mật mã, khi không có salt nào được cung cấp bởi nhà phát triển - do đó, việc tạo salt tùy chỉnh không còn cần thiết nữa.

capture_session_meta SSL context option

Tùy chọn ngữ cảnh SSL capture_session_meta đã bị loại bỏ. Dữ liệu siêu dữ liệu SSL hiện được sử dụng thông qua hàm stream_get_meta_data().

ext/mcrypt

Tiện ích mở rộng mcrypt đã bị ngừng sử dụng để ủng hộ OpenSSL.

Unquoted Strings

Các chuỗi không được trích dẫn mà không phải là hằng toàn cục không tồn tại sẽ được coi là chuỗi của chính chúng. Hành vi này trước đây sẽ phát ra một E_NOTICE, nhưng giờ sẽ phát ra một E_WARNING. Trong phiên bản chính tiếp theo của PHP, một ngoại lệ Error sẽ được ném ra thay vào đó.

The __autoload() Method

Phương thức __autoload() đã bị loại bỏ vì nó kém hơn so với spl_autoload_register() (do không thể nối chuỗi các autoloader), và không có khả năng tương tác giữa hai kiểu autoloading này.

The create_function() Function

Do các vấn đề bảo mật của hàm này, nó đã bị loại bỏ. Giải pháp thay thế được ưa chuộng là sử dụng các hàm ẩn danh.

The each() Function

Hàm này gây ra các vấn đề về triển khai cho một số thay đổi ngôn ngữ. Do đó, nó đã bị loại bỏ.

Case-Insensitive Constants

Việc khai báo các hằng không phân biệt chữ hoa chữ thường đã bị loại bỏ. Việc truyền giá trị true làm tham số thứ ba cho hàm define() sẽ tạo ra một cảnh báo về việc đã bị loại bỏ.

The (real) and is-real() Function

Cách chuyển đổi (real) đã lỗi thời, hãy sử dụng (float) thay thế. Hàm is_real() cũng đã lỗi thời, hãy sử dụng is_float() thay thế.

The "parent" Leyword

Việc sử dụng `parent` bên trong một lớp không có lớp cha là đã lỗi thời và sẽ gây ra lỗi biên dịch trong tương lai. Hiện tại, một lỗi chỉ được tạo ra nếu/khi lớp cha được truy cập tại thời điểm chạy.

Deprecated in PHP Ver 8

Nếu một tham số có giá trị mặc định được theo sau bởi một tham số bắt buộc, giá trị mặc định sẽ không có hiệu lực. Điều này đã bị ngừng hỗ trợ kể từ PHP 8.0.0 và có thể thường được giải quyết bằng cách bỏ giá trị mặc định, mà không làm thay đổi chức năng.

<?php
   function test($a = [], $b) {}  // Before
   function test($a, $b) {}      // After
?>

Một ngoại lệ đối với quy tắc này là các tham số có dạng Type $param = null, trong đó giá trị mặc định null làm cho kiểu trở thành nullable ngầm định. Việc sử dụng này vẫn được phép, nhưng được khuyến nghị sử dụng kiểu nullable rõ ràng thay vào đó.

<?php
   function test(A $a = null, $b) {} 	// Still allowed
   function test(?A $a, $b) {}         // Recommended
?>

Gọi get_defined_functions() với tham số exclude_disabled được đặt rõ ràng là false đã bị loại bỏ và không còn tác dụng. get_defined_functions() sẽ không bao giờ bao gồm các hàm bị vô hiệu hóa.

Các hàm so sánh sắp xếp trả về true hoặc false sẽ hiện nay gây ra cảnh báo lỗi không còn được sử dụng, và nên được thay thế bằng một triển khai trả về một số nguyên nhỏ hơn, bằng hoặc lớn hơn không.

<?php
   // Replace
   usort($array, fn($a, $b) => $a > $b);
   // With
   usort($array, fn($a, $b) => $a <=> $b);
?>

Implicit Incompatible float to int Conversions

Việc chuyển đổi ngầm định từ float sang int, dẫn đến mất độ chính xác, hiện đã bị ngừng sử dụng. Điều này ảnh hưởng đến các khóa mảng, các khai báo kiểu int trong chế độ cưỡng bức, và các toán tử hoạt động trên int.

Calling a Static Element on a Trait

Gọi một phương thức tĩnh, hoặc truy cập một thuộc tính tĩnh trực tiếp trên một trait là đã lỗi thời. Các phương thức và thuộc tính tĩnh chỉ nên được truy cập trên một lớp sử dụng trait.

Date Functions

date_sunrise() và date_sunset() đã bị loại bỏ. Hãy sử dụng date_sun_info() thay vào đó.

strptime() đã bị ngừng sử dụng. Sử dụng date_parse_from_format() thay thế (để phân tích không phụ thuộc vào ngôn ngữ), hoặc IntlDateFormatter::parse() (để phân tích phụ thuộc vào ngôn ngữ).

strftime() và gmstrftime() đã bị loại bỏ. Bạn có thể sử dụng date() thay thế (cho định dạng không phụ thuộc vào ngôn ngữ), hoặc IntlDateFormatter::format() (cho định dạng phụ thuộc vào ngôn ngữ).

Dynamic Properties

Việc tạo các thuộc tính động đã bị loại bỏ. Thay vào đó, hãy sử dụng stdClass cho phép các thuộc tính động.