Làm thế nào để bạn xác định các thuộc tính trong PHP?

Học Rust theo cách khó khăn cho một quy trình sản xuất Kafka + ScyllaDB (Hội thảo trên web trực tiếp vào ngày 2 tháng 3 năm 2023) - Tiết kiệm chỗ ngồi của bạn

Show

PHP 8 — Thuộc tính, Biểu thức khớp và các cải tiến khác

Thích In Dấu trang

Ngày 18 tháng 10 năm 2022 16 phút đọc

qua

  • Deepak Vohra

xét bởi

  • Sergio De Simone

Viết cho InfoQ

Tham gia cộng đồng chuyên gia. Tăng khả năng hiển thị của bạn.
Phát triển sự nghiệp của bạn
Tìm hiểu thêm

Chìa khóa rút ra

  • PHP 8 là một bản cập nhật lớn cho PHP giới thiệu một số tính năng mới và tối ưu hóa hiệu suất.  
  • Thuộc tính trong PHP 8 là các lệnh cấu hình được sử dụng để thêm siêu dữ liệu cú pháp áp dụng cho từng lớp, hàm, phương thức và các cấu trúc khác.  
  • Biểu thức
    public string $sortType="";
    public $arrayToSort=array("B", "A", "f", "C");
    
    4 mới trong PHP 8 là một cấu trúc luồng điều khiển khớp một biểu thức chủ đề nhất định với một hoặc nhiều biểu thức điều kiện thay thế bằng cách sử dụng phép so sánh danh tính và trả về một giá trị từ nhánh đã khớp.  
  • PHP8. 1 bổ sung hỗ trợ cho việc sử dụng toán tử
    public string $sortType="";
    public $arrayToSort=array("B", "A", "f", "C");
    
    5 cho các giá trị mặc định của tham số, đối số thuộc tính, bộ khởi tạo biến tĩnh và bộ khởi tạo hằng số toàn cầu.  
  • PHP 8 thêm hỗ trợ cho việc sử dụng toán tử
    public string $sortType="";
    public $arrayToSort=array("B", "A", "f", "C");
    
    6 với các biểu thức tùy ý.  
     

Bài viết này là một phần của loạt bài viết "PHP 8. x". Bạn có thể đăng ký để nhận thông báo về các bài viết mới trong loạt bài này qua RSS

PHP tiếp tục là một trong những ngôn ngữ kịch bản được sử dụng rộng rãi nhất trên web với 77. 3% của tất cả các trang web có ngôn ngữ lập trình phía máy chủ được biết là sử dụng nó theo w3tech. PHP 8 mang đến nhiều tính năng mới và những cải tiến khác mà chúng ta sẽ khám phá trong loạt bài viết này

    Nội dung được tài trợ có liên quan

Nhà tài trợ liên quan

Làm thế nào để bạn xác định các thuộc tính trong PHP?

  • Ngày 09 tháng 2 năm 2023, 1 giờ chiều Múi giờ miền Đông
    Các mẫu phổ biến cho môi trường dữ liệu truyền phát phân tán

    trình bày bởi. Dunith Dhanushka - Người ủng hộ nhà phát triển cấp cao, Dữ liệu Redpanda

    ĐƯỢC TÀI TRỢ BỞI REDPANDA

    Lưu chỗ ngồi của bạn

PHP 8 là một bản cập nhật lớn cho PHP giới thiệu một số tính năng mới và tối ưu hóa hiệu suất, bao gồm các thuộc tính, biểu thức so khớp, toán tử _______0_______6, toán tử mới, trình biên dịch JIT mới, v.v.  

Các thuộc tính cung cấp một cách để thêm siêu dữ liệu vào các lớp, phương thức, hàm, tham số, thuộc tính và hằng số lớp. Các thuộc tính tương tự như chú thích được một số ngôn ngữ khác hỗ trợ. Toán tử

public string $sortType="";
public $arrayToSort=array("B", "A", "f", "C");
5, chỉ khả dụng bắt đầu từ PHP 8. 1, có thể được sử dụng trong trình khởi tạo cho các giá trị tham số mặc định, biến tĩnh và đối số thuộc tính. Biểu thức
public string $sortType="";
public $arrayToSort=array("B", "A", "f", "C");
4  là một cấu trúc điều khiển mới đánh giá một biểu thức chủ đề với các biểu thức điều kiện có nhiều nhánh bằng cách sử dụng toán tử đồng nhất và thực thi nhánh phù hợp. Toán tử
public string $sortType="";
public $arrayToSort=array("B", "A", "f", "C");
6, trước đây chỉ có thể được sử dụng với một đối tượng lớp, cũng có thể được sử dụng với bất kỳ biểu thức tùy ý nào. Trình biên dịch JIT (Just-In-Time) mang đến những cải tiến về hiệu suất và khả năng sử dụng.  

Một số ví dụ dựa trên cấu trúc dữ liệu yêu cầu tải xuống và cài đặt tiện ích mở rộng

#[Validate]
    public function arrayEmpty()
    {
        if (count($this->arrayToSort) === 0) {
            throw new RuntimeException("Array is empty; please provide a non-empty array");
        }
    }
1 từ đây. Trên Windows, tải xuống  DLL cho 8. 1 Non Thread Safe (NTS) x64 từ đây và giải nén php_ds-1. 4. 0-8. 1-nts-vs16-x64. zip tập tin vào một thư mục. Sao chép php_ds. dll từ thư mục giải nén vào. \ext thư mục trong PHP 8. x gốc cài đặt, ví dụ C. \php-8. 1. 9-nts-Win32-vs16-x64\ext. Thêm dòng sau vào php. tập tin cấu hình ini

#[Validate]
    public function arrayEmpty()
    {
        if (count($this->arrayToSort) === 0) {
            throw new RuntimeException("Array is empty; please provide a non-empty array");
        }
    }
2

Khởi động lại máy chủ tích hợp PHP nếu nó đang chạy

Thuộc tính

Thuộc tính là các chỉ thị cấu hình được sử dụng để chú thích hoặc trang trí các lớp, phương thức, hàm, tham số, thuộc tính và hằng số lớp với siêu dữ liệu có cấu trúc và có thể đọc được bằng máy. “Có cấu trúc” có nghĩa là thông tin siêu dữ liệu có thể được đọc và phân tích cú pháp, làm cho các thuộc tính khác với các nhận xét tài liệu không có cấu trúc, vốn chỉ là các chuỗi đơn giản. Các thuộc tính có thể được sử dụng để cung cấp cấu hình và thông tin khác đôi khi chỉ liên quan và do đó được nhúng, không được mã hóa cứng vào tập lệnh PHP. Sau đây là trình tự điển hình để sử dụng các thuộc tính

  1. Khai báo một lớp thuộc tính. Một lớp thuộc tính là một lớp PHP thông thường đứng trước
    #[Validate]
        public function arrayEmpty()
        {
            if (count($this->arrayToSort) === 0) {
                throw new RuntimeException("Array is empty; please provide a non-empty array");
            }
        }
    
    3 trên một dòng của chính nó. Lớp có thể tùy chọn khai báo một hàm tạo. Một thuộc tính được xác định bởi lớp của nó; .   
  2. Áp dụng hoặc sử dụng thuộc tính trên khai báo lớp, phương thức, hàm, tham số, thuộc tính và hằng số lớp. Ví dụ: nếu lớp thuộc tính có tên là
    #[Validate]
        public function arrayEmpty()
        {
            if (count($this->arrayToSort) === 0) {
                throw new RuntimeException("Array is empty; please provide a non-empty array");
            }
        }
    
    4, thì thuộc tính đó được sử dụng là 
    #[Validate]
        public function arrayEmpty()
        {
            if (count($this->arrayToSort) === 0) {
                throw new RuntimeException("Array is empty; please provide a non-empty array");
            }
        }
    
    5. Cùng một thuộc tính có thể được sử dụng nhiều lần trên các khai báo khác nhau. Và nhiều thuộc tính có thể được áp dụng cho cùng một khai báo.  
  3. Nhận hoặc đọc các thuộc tính, nếu cần, bằng cách sử dụng API phản chiếu khi chạy

Các thuộc tính có thể có một số cách sử dụng, chẳng hạn như

  • Cung cấp thay thế cho một giao diện, lợi ích là trong khi một lớp triển khai giao diện yêu cầu tất cả các phương thức từ giao diện được triển khai, một thuộc tính chỉ có thể được sử dụng khi cần, do đó tránh được việc triển khai phương thức không cần thiết.  
  • Thay đổi biên dịch, chẩn đoán, tạo mã và hành vi thời gian chạy.  
  • Tách công cụ PHP và tiện ích mở rộng. Lõi PHP và các tiện ích mở rộng có thể có một số thuộc tính trên một số khai báo.  
  • Nhúng thông tin cấu hình cụ thể cho một khai báo. Ví dụ, các thuộc tính trên một phương thức có thể chỉ ra những sự kiện mà phương thức đó lắng nghe.
  • Di chuyển từ docblocks sang thuộc tính.  

Theo mặc định, một thuộc tính có thể được sử dụng trên bất kỳ hoặc tất cả các loại khai báo được hỗ trợ. Nhưng việc sử dụng thuộc tính có thể bị giới hạn ở một hoặc nhiều loại khai báo sử dụng cờ bitmask đã chọn

#[Validate]
    public function arrayEmpty()
    {
        if (count($this->arrayToSort) === 0) {
            throw new RuntimeException("Array is empty; please provide a non-empty array");
        }
    }
6. Cờ
#[Validate]
    public function arrayEmpty()
    {
        if (count($this->arrayToSort) === 0) {
            throw new RuntimeException("Array is empty; please provide a non-empty array");
        }
    }
7 là mặc định. Một thuộc tính có thể được sử dụng nhiều lần trên một khai báo bằng cách sử dụng cờ bitmask
#[Validate]
    public function arrayEmpty()
    {
        if (count($this->arrayToSort) === 0) {
            throw new RuntimeException("Array is empty; please provide a non-empty array");
        }
    }
8

Tiếp theo, chúng ta sẽ khám phá việc sử dụng các thuộc tính với một ví dụ. Giả sử rằng bạn muốn sắp xếp một mảng bằng cách sử dụng một hoặc nhiều hàm sắp xếp, chẳng hạn như

#[Validate]
    public function arrayEmpty()
    {
        if (count($this->arrayToSort) === 0) {
            throw new RuntimeException("Array is empty; please provide a non-empty array");
        }
    }
9 để sắp xếp theo thứ tự tăng dần,
#[Validate]
    public function arraySize()
    {
        if (sizeof($this->arrayToSort) < 2) {
            throw new RuntimeException("Please provide an array of size 2 or more");
        }
    }
0để sắp xếp theo thứ tự giảm dần và
#[Validate]
    public function arraySize()
    {
        if (sizeof($this->arrayToSort) < 2) {
            throw new RuntimeException("Please provide an array of size 2 or more");
        }
    }
1 để xáo trộn theo thứ tự ngẫu nhiên. Bạn cũng có thể muốn xác thực mảng đầu vào để xác minh rằng nó không phải là một mảng trống hoặc nó có ít nhất hai phần tử để sắp xếp phù hợp. Thông tin loại sắp xếp và thông tin xác thực có thể được cung cấp dưới dạng thuộc tính.  

Đầu tiên, khai báo một lớp thuộc tính để xác thực

#[Attribute]
class Validate {}

Sau đó, khai báo một lớp thuộc tính khác cho kiểu sắp xếp. Các cờ bitmask

#[Validate]
    public function arraySize()
    {
        if (sizeof($this->arrayToSort) < 2) {
            throw new RuntimeException("Please provide an array of size 2 or more");
        }
    }
2 và
#[Validate]
    public function arraySize()
    {
        if (sizeof($this->arrayToSort) < 2) {
            throw new RuntimeException("Please provide an array of size 2 or more");
        }
    }
3 chỉ ra rằng thuộc tính chỉ được sử dụng với khai báo lớp và thuộc tính có thể lặp lại.  

#[Attribute(Attribute::TARGET_CLASS|Attribute::IS_REPEATABLE)]
class SortType {

function __construct($sortType){
        $this->sortType = $sortType;
    }
}

Bây giờ hãy khai báo một giao diện với một phương thức duy nhất có tên là sortArray()

interface Sort 
{   
    public function sortArray();
}

Cuối cùng, khai báo một lớp thực hiện giao diện Sắp xếp

class SortImpl implements Sort
{

…}

Trong lớp, khai báo hai thuộc tính lớp, một cho kiểu sắp xếp và thứ hai cho mảng được sắp xếp

public string $sortType="";
public $arrayToSort=array("B", "A", "f", "C");

Khai báo một phương thức để xác thực rằng mảng được sắp xếp không phải là một mảng trống. Chú thích phương thức với thuộc tính #[Validate]. Áp dụng thuộc tính cho phương thức làm cho phương thức có thể khám phá được bằng API phản chiếu

#[Validate]
    public function arrayEmpty()
    {
        if (count($this->arrayToSort) === 0) {
            throw new RuntimeException("Array is empty; please provide a non-empty array");
        }
    }

Khai báo phương thức thứ hai để xác thực rằng mảng có ít nhất hai phần tử và áp dụng thuộc tính

#[Validate]
    public function arrayEmpty()
    {
        if (count($this->arrayToSort) === 0) {
            throw new RuntimeException("Array is empty; please provide a non-empty array");
        }
    }
5 cho nó

#[Validate]
    public function arraySize()
    {
        if (sizeof($this->arrayToSort) < 2) {
            throw new RuntimeException("Please provide an array of size 2 or more");
        }
    }

Thực hiện chức năng

#[Validate]
    public function arraySize()
    {
        if (sizeof($this->arrayToSort) < 2) {
            throw new RuntimeException("Please provide an array of size 2 or more");
        }
    }
5. Dựa trên giá trị của
#[Validate]
    public function arraySize()
    {
        if (sizeof($this->arrayToSort) < 2) {
            throw new RuntimeException("Please provide an array of size 2 or more");
        }
    }
6, hãy sắp xếp tăng dần/giảm dần/xáo trộn

public function sortArray()
    { 
        
         if ($this->sortType == "asc") {
            …

        } elseif ($this->sortType == "desc") {
            …

        } else {
              
             …

    }

Thêm một chức năng gọi là

#[Validate]
    public function arraySize()
    {
        if (sizeof($this->arrayToSort) < 2) {
            throw new RuntimeException("Please provide an array of size 2 or more");
        }
    }
7 để thực hiện sắp xếp. Trong hàm, hãy áp dụng các xác thực trước khi thực hiện sắp xếp.  

Khai báo một lớp và áp dụng thuộc tính

#[Validate]
    public function arraySize()
    {
        if (sizeof($this->arrayToSort) < 2) {
            throw new RuntimeException("Please provide an array of size 2 or more");
        }
    }
8 cho nó. Vì thuộc tính có thể lặp lại, hãy áp dụng thuộc tính nhiều lần để thực hiện các kiểu sắp xếp khác nhau.  

#[SortType(sortType: "desc")] 
#[SortType(sortType: "shuffle")]  
#[SortType(sortType: "asc")]              
class QSort
{
}

Cuối cùng, tạo một thể hiện của lớp

#[Validate]
    public function arraySize()
    {
        if (sizeof($this->arrayToSort) < 2) {
            throw new RuntimeException("Please provide an array of size 2 or more");
        }
    }
9

$sort = new SortImpl();

Nhận các thuộc tính lớp bằng API phản chiếu

#[Attribute(Attribute::TARGET_CLASS|Attribute::IS_REPEATABLE)]
class SortType {

function __construct($sortType){
        $this->sortType = $sortType;
    }
}
0

Lặp lại mảng thuộc tính để gọi hàm PerformanceSort() để thực hiện sắp xếp cho từng loại kiểu sắp xếp và xuất kết quả sắp xếp

#[Attribute(Attribute::TARGET_CLASS|Attribute::IS_REPEATABLE)]
class SortType {

function __construct($sortType){
        $this->sortType = $sortType;
    }
}
1

Tập lệnh

public function sortArray()
    { 
        
         if ($this->sortType == "asc") {
            …

        } elseif ($this->sortType == "desc") {
            …

        } else {
              
             …

    }
0 hoàn chỉnh để chứng minh việc sử dụng các thuộc tính có sẵn trên GitHub. Sao chép sắp xếp. php vào thư mục
public function sortArray()
    { 
        
         if ($this->sortType == "asc") {
            …

        } elseif ($this->sortType == "desc") {
            …

        } else {
              
             …

    }
1 và với máy chủ tích hợp PHP đang chạy và nghe tại http. //máy chủ cục bộ. 8000 gọi tập lệnh
public function sortArray()
    { 
        
         if ($this->sortType == "asc") {
            …

        } elseif ($this->sortType == "desc") {
            …

        } else {
              
             …

    }
0 trong trình duyệt có url http. //máy chủ cục bộ. 8000/tập lệnh/sắp xếp. php. Kết quả sắp xếp sử dụng các kiểu sắp xếp khác nhau được hiển thị trong trình duyệt như trong Hình 1

Làm thế nào để bạn xác định các thuộc tính trong PHP?

Hình 1. Kết quả sắp xếp theo thuộc tính

Vì sắp xếp ngẫu nhiên là sắp xếp ngẫu nhiên nên kết quả của việc sắp xếp ngẫu nhiên có thể khác nhau mỗi khi tập lệnh được chạy, như thể hiện trong Hình 2

Làm thế nào để bạn xác định các thuộc tính trong PHP?

Hình 2. Sắp xếp ngẫu nhiên tạo ra một kết quả khác

Vì mảng mẫu cần sắp xếp có 4 phần tử nên không có lần xác thực nào thất bại. Nếu mảng mẫu trống, thì ngược lại, cùng một tập lệnh, chỉ có mảng mẫu được thay đổi, sẽ tạo ra một thông báo ngoại lệ thời gian chạy

public function sortArray()
    { 
        
         if ($this->sortType == "asc") {
            …

        } elseif ($this->sortType == "desc") {
            …

        } else {
              
             …

    }
3. Tương tự, nếu mảng mẫu chỉ có 1 phần tử, ngoại lệ thời gian chạy được tạo với thông báo.
public function sortArray()
    { 
        
         if ($this->sortType == "asc") {
            …

        } elseif ($this->sortType == "desc") {
            …

        } else {
              
             …

    }
4

Toán tử public string $sortType=""; public $arrayToSort=array("B", "A", "f", "C"); 5 nâng cao

Toán tử

public string $sortType="";
public $arrayToSort=array("B", "A", "f", "C");
5 được sử dụng để tạo một thể hiện của một lớp. Kể từ PHP 8. 1, toán tử new có thể được sử dụng trong các biểu thức tùy ý với cú pháp sau, trong đó biểu thức phải được đặt trong dấu ngoặc đơn.  

#[Attribute(Attribute::TARGET_CLASS|Attribute::IS_REPEATABLE)]
class SortType {

function __construct($sortType){
        $this->sortType = $sortType;
    }
}
2

Toán tử

public string $sortType="";
public $arrayToSort=array("B", "A", "f", "C");
5 có thể được sử dụng trong bộ khởi tạo cho các giá trị mặc định của tham số, bộ khởi tạo biến tĩnh, bộ khởi tạo hằng số toàn cục và đối số thuộc tính như được khám phá tiếp theo với các ví dụ

Toán tử public string $sortType=""; public $arrayToSort=array("B", "A", "f", "C"); 5 trong các giá trị mặc định của tham số chức năng

Để chứng minh việc sử dụng toán tử new trong các giá trị mặc định của tham số hàm, chúng ta sẽ sử dụng một biến thể của ví dụ sắp xếp mảng. Hãy xem xét một lớp có tên là

public function sortArray()
    { 
        
         if ($this->sortType == "asc") {
            …

        } elseif ($this->sortType == "desc") {
            …

        } else {
              
             …

    }
9 khai báo một phương thức
#[SortType(sortType: "desc")] 
#[SortType(sortType: "shuffle")]  
#[SortType(sortType: "asc")]              
class QSort
{
}
0 để sắp xếp một mảng theo thứ tự tăng dần.  

#[Attribute(Attribute::TARGET_CLASS|Attribute::IS_REPEATABLE)]
class SortType {

function __construct($sortType){
        $this->sortType = $sortType;
    }
}
3

Lớp thứ hai có tên là

#[SortType(sortType: "desc")] 
#[SortType(sortType: "shuffle")]  
#[SortType(sortType: "asc")]              
class QSort
{
}
1 khai báo một phương thức để sắp xếp một mảng theo thứ tự giảm dần

#[Attribute(Attribute::TARGET_CLASS|Attribute::IS_REPEATABLE)]
class SortType {

function __construct($sortType){
        $this->sortType = $sortType;
    }
}
4

Bây giờ hãy khai báo một hàm chấp nhận bất kỳ mảng tùy ý nào và một bộ sắp xếp mảng để sắp xếp mảng. Trình sắp xếp mảng mặc định có thể được xác định bằng cách sử dụng  toán tử mới để tạo một phiên bản của

public function sortArray()
    { 
        
         if ($this->sortType == "asc") {
            …

        } elseif ($this->sortType == "desc") {
            …

        } else {
              
             …

    }
9

#[Attribute(Attribute::TARGET_CLASS|Attribute::IS_REPEATABLE)]
class SortType {

function __construct($sortType){
        $this->sortType = $sortType;
    }
}
5

Tập lệnh hoàn chỉnh có sẵn trên GitHub. Chạy tập lệnh mẫu trên máy chủ tích hợp với url http. //máy chủ cục bộ. 8000/tập lệnh/mẫu. php

Đầu ra được hiển thị ở đây

#[Attribute(Attribute::TARGET_CLASS|Attribute::IS_REPEATABLE)]
class SortType {

function __construct($sortType){
        $this->sortType = $sortType;
    }
}
6

Toán tử public string $sortType=""; public $arrayToSort=array("B", "A", "f", "C"); 5 trong bộ khởi tạo biến và hằng

Toán tử

public string $sortType="";
public $arrayToSort=array("B", "A", "f", "C");
5 có thể được sử dụng trong bộ khởi tạo biến tĩnh và bộ khởi tạo hằng số toàn cầu. Tuy nhiên, toán tử
public string $sortType="";
public $arrayToSort=array("B", "A", "f", "C");
5 không được hỗ trợ trong bộ khởi tạo thuộc tính lớp tĩnh và không tĩnh, cũng như trong bộ khởi tạo hằng số lớp. Tập lệnh sau đây cho biết bộ khởi tạo biến và hằng nào được hỗ trợ và bộ khởi tạo nào không.  

#[Attribute(Attribute::TARGET_CLASS|Attribute::IS_REPEATABLE)]
class SortType {

function __construct($sortType){
        $this->sortType = $sortType;
    }
}
7

Toán tử public string $sortType=""; public $arrayToSort=array("B", "A", "f", "C"); 5 trong Đối số thuộc tính

Như bạn mong đợi, toán tử

public string $sortType="";
public $arrayToSort=array("B", "A", "f", "C");
5 cũng có thể được sử dụng trong các đối số thuộc tính. Chúng tôi sẽ sử dụng cùng một ví dụ mà chúng tôi đã sử dụng để minh họa tính năng Thuộc tính với một điểm khác biệt. Hãy nhớ rằng chúng ta đã sử dụng thuộc tính
#[Validate]
    public function arraySize()
    {
        if (sizeof($this->arrayToSort) < 2) {
            throw new RuntimeException("Please provide an array of size 2 or more");
        }
    }
8 để chú thích lớp
#[SortType(sortType: "desc")] 
#[SortType(sortType: "shuffle")]  
#[SortType(sortType: "asc")]              
class QSort
{
}
9 với các đối số thuộc tính được truyền cho nó dưới dạng chuỗi

#[SortType(sortType: "desc")] 
#[SortType(sortType: "shuffle")]  
#[SortType(sortType: "asc")]              
class QSort
{
}

Đối với trường hợp này, hãy khai báo một lớp có tên là

$sort = new SortImpl();
0 chấp nhận đối số chuỗi làm đối số hàm tạo

#[Attribute(Attribute::TARGET_CLASS|Attribute::IS_REPEATABLE)]
class SortType {

function __construct($sortType){
        $this->sortType = $sortType;
    }
}
9

Sử dụng toán tử

public string $sortType="";
public $arrayToSort=array("B", "A", "f", "C");
5 trong các đối số thuộc tính như sau

interface Sort 
{   
    public function sortArray();
}
0

Chạy tập lệnh trong máy chủ tích hợp với cùng đầu ra như trước đây, như trong Hình 3

Làm thế nào để bạn xác định các thuộc tính trong PHP?

Hình 3. Kết quả từ việc sử dụng new trong đối số thuộc tính

Toán tử public string $sortType=""; public $arrayToSort=array("B", "A", "f", "C"); 5 không được phép trong một số ngữ cảnh

Trước đó, chúng tôi đã đề cập đến một số ngữ cảnh trong đó toán tử

public string $sortType="";
public $arrayToSort=array("B", "A", "f", "C");
5 không được hỗ trợ, đó là trình khởi tạo thuộc tính lớp tĩnh và không tĩnh, và trình khởi tạo hằng số lớp. Ngoài ra, toán tử
public string $sortType="";
public $arrayToSort=array("B", "A", "f", "C");
5 không được hỗ trợ trong các ngữ cảnh sau

  • Tên lớp động không chuỗi
  • Giải nén đối số trong biểu thức không đổi
  • Lớp ẩn danh trong biểu thức không đổi
  • Biểu thức hằng số không được hỗ trợ

Đoạn script sau tạo ra lỗi cho các câu lệnh đã nhận xét

interface Sort 
{   
    public function sortArray();
}
1

Biểu thức public string $sortType=""; public $arrayToSort=array("B", "A", "f", "C"); 4 mới

PHP 8 giới thiệu một biểu thức

public string $sortType="";
public $arrayToSort=array("B", "A", "f", "C");
4 mới dưới dạng cấu trúc luồng điều khiển khớp với một biểu thức chủ đề đã cho với một hoặc nhiều nhánh thay thế bằng cách sử dụng so sánh danh tính và trả về một giá trị là kết quả từ nhánh đã khớp. Biểu thức khớp tương tự như câu lệnh
$sort = new SortImpl();
7 nhưng khác như sau

  • Biểu thức
    public string $sortType="";
    public $arrayToSort=array("B", "A", "f", "C");
    
    4 sử dụng toán tử đồng nhất
    $sort = new SortImpl();
    9 để so sánh, trong khi đó,
    $sort = new SortImpl();
    7 sử dụng toán tử đẳng thức
    #[Attribute(Attribute::TARGET_CLASS|Attribute::IS_REPEATABLE)]
    class SortType {
    
    function __construct($sortType){
            $this->sortType = $sortType;
        }
    }
    
    01
  • Biểu thức
    public string $sortType="";
    public $arrayToSort=array("B", "A", "f", "C");
    
    4 trả về một giá trị, trong khi biểu thức
    $sort = new SortImpl();
    7 thì không. Giá trị trả về có thể được gán cho một biến.  
  • Biểu thức
    public string $sortType="";
    public $arrayToSort=array("B", "A", "f", "C");
    
    4 tự động ngắt ra khỏi
    public string $sortType="";
    public $arrayToSort=array("B", "A", "f", "C");
    
    4 sau khi một trong các nhánh được so khớp.
    $sort = new SortImpl();
    7 yêu cầu một
    #[Attribute(Attribute::TARGET_CLASS|Attribute::IS_REPEATABLE)]
    class SortType {
    
    function __construct($sortType){
            $this->sortType = $sortType;
        }
    }
    
    07;
  • Biểu thức
    public string $sortType="";
    public $arrayToSort=array("B", "A", "f", "C");
    
    4 không rơi xuyên qua, giống như một công tắc thực hiện trong trường hợp không có dấu ngắt;
  • Biểu thức
    public string $sortType="";
    public $arrayToSort=array("B", "A", "f", "C");
    
    4 hỗ trợ nhiều điều kiện được phân tách bằng dấu phẩy (,) trong cùng một nhánh, trong khi
    $sort = new SortImpl();
    7 thì không
  • Biểu thức
    public string $sortType="";
    public $arrayToSort=array("B", "A", "f", "C");
    
    4 phải đầy đủ, ngụ ý rằng nó phải xử lý tất cả các giá trị của biểu thức chủ đề.   

Tiếp theo, chúng tôi minh họa việc sử dụng biểu thức

public string $sortType="";
public $arrayToSort=array("B", "A", "f", "C");
4 với một số ví dụ.  

Xuất giá trị trả về

Để bắt đầu với một ví dụ đơn giản, biểu thức

public string $sortType="";
public $arrayToSort=array("B", "A", "f", "C");
4 trong tập lệnh sau khớp với giá trị nguyên của
#[Attribute(Attribute::TARGET_CLASS|Attribute::IS_REPEATABLE)]
class SortType {

function __construct($sortType){
        $this->sortType = $sortType;
    }
}
14, được cho dưới dạng biểu thức chủ đề, với nhiều biểu thức điều kiện bao gồm mẫu
#[Attribute(Attribute::TARGET_CLASS|Attribute::IS_REPEATABLE)]
class SortType {

function __construct($sortType){
        $this->sortType = $sortType;
    }
}
15

interface Sort 
{   
    public function sortArray();
}
2

Chạy tập lệnh trong công cụ tích hợp bằng cách gọi tập lệnh trong trình duyệt có url

http. //máy chủ cục bộ. 8000/tập lệnh/trận đấu. php. đầu ra là

#[Attribute(Attribute::TARGET_CLASS|Attribute::IS_REPEATABLE)]
class SortType {

function __construct($sortType){
        $this->sortType = $sortType;
    }
}
16

Trong tập lệnh sau, biểu thức chủ đề không khớp với bất kỳ biểu thức điều kiện không mặc định nào

interface Sort 
{   
    public function sortArray();
}
3

đầu ra là

#[Attribute(Attribute::TARGET_CLASS|Attribute::IS_REPEATABLE)]
class SortType {

function __construct($sortType){
        $this->sortType = $sortType;
    }
}
17

Không thể nhóm điều kiện

#[Attribute(Attribute::TARGET_CLASS|Attribute::IS_REPEATABLE)]
class SortType {

function __construct($sortType){
        $this->sortType = $sortType;
    }
}
15 với các điều kiện khác như trong tập lệnh

interface Sort 
{   
    public function sortArray();
}
4

Khi kịch bản được chạy, nó tạo ra lỗi

interface Sort 
{   
    public function sortArray();
}
5

Một ví dụ tương đối phức tạp, tập lệnh sau có một biến được khởi tạo từ lớp 

#[Attribute(Attribute::TARGET_CLASS|Attribute::IS_REPEATABLE)]
class SortType {

function __construct($sortType){
        $this->sortType = $sortType;
    }
}
19. Biểu thức chủ đề truy cập biến vectơ trong ký hiệu mảng.  

interface Sort 
{   
    public function sortArray();
}
6

Gọi tập lệnh trong trình duyệt bằng url  http. //máy chủ cục bộ. 8000/tập lệnh/trận đấu. php

Kết quả là

#[Attribute(Attribute::TARGET_CLASS|Attribute::IS_REPEATABLE)]
class SortType {

function __construct($sortType){
        $this->sortType = $sortType;
    }
}
20

Gán giá trị trả về cho một biến

Giá trị trả về cũng có thể được gán cho một biến và các điều kiện khớp có thể là bất kỳ biểu thức tùy ý nào. Trong tập lệnh sau, biểu thức đối sánh khớp với giá trị boolean đúng như biểu thức chủ đề với các biểu thức điều kiện gọi các hàm chuỗi dựng sẵn khác.  

interface Sort 
{   
    public function sortArray();
}
7

đầu ra là

interface Sort 
{   
    public function sortArray();
}
8

Không ép buộc kiểu

Không giống như so sánh lỏng lẻo được thực hiện bởi một câu lệnh

$sort = new SortImpl();
7, biểu thức
public string $sortType="";
public $arrayToSort=array("B", "A", "f", "C");
4 tạo ra một so sánh nghiêm ngặt và không có sự ép buộc loại nào được thực hiện. Đầu tiên, một ví dụ về so sánh lỏng lẻo với câu lệnh
$sort = new SortImpl();
7. Đoạn script sau khớp với điều kiện đầu tiên và xuất ra giá trị của
#[Attribute(Attribute::TARGET_CLASS|Attribute::IS_REPEATABLE)]
class SortType {

function __construct($sortType){
        $this->sortType = $sortType;
    }
}
24.  

interface Sort 
{   
    public function sortArray();
}
9

Ngược lại,

public string $sortType="";
public $arrayToSort=array("B", "A", "f", "C");
4 trong tập lệnh sau thực hiện so sánh chặt chẽ và khớp với điều kiện mặc định để xuất ra
#[Attribute(Attribute::TARGET_CLASS|Attribute::IS_REPEATABLE)]
class SortType {

function __construct($sortType){
        $this->sortType = $sortType;
    }
}
17

class SortImpl implements Sort
{

…}
0

Ngay cả các giá trị #[Attribute(Attribute::TARGET_CLASS|Attribute::IS_REPEATABLE)] class SortType { function __construct($sortType){ $this->sortType = $sortType; } } 27 cũng được đối sánh bằng cách so sánh danh tính

Biểu thức

public string $sortType="";
public $arrayToSort=array("B", "A", "f", "C");
4 thực hiện so sánh đồng nhất bằng cách sử dụng toán tử đồng nhất
#[Attribute(Attribute::TARGET_CLASS|Attribute::IS_REPEATABLE)]
class SortType {

function __construct($sortType){
        $this->sortType = $sortType;
    }
}
29), ngụ ý rằng ngay cả các giá trị
#[Attribute(Attribute::TARGET_CLASS|Attribute::IS_REPEATABLE)]
class SortType {

function __construct($sortType){
        $this->sortType = $sortType;
    }
}
27 cũng được so khớp. Khi phương thức
#[Attribute(Attribute::TARGET_CLASS|Attribute::IS_REPEATABLE)]
class SortType {

function __construct($sortType){
        $this->sortType = $sortType;
    }
}
31 trả về
#[Attribute(Attribute::TARGET_CLASS|Attribute::IS_REPEATABLE)]
class SortType {

function __construct($sortType){
        $this->sortType = $sortType;
    }
}
27, biểu thức khớp trong tập lệnh sau thực sự khớp với các giá trị
#[Attribute(Attribute::TARGET_CLASS|Attribute::IS_REPEATABLE)]
class SortType {

function __construct($sortType){
        $this->sortType = $sortType;
    }
}
27 được trả về bởi phương thức_______21_______31.   

class SortImpl implements Sort
{

…}
1

Điều kiện đầu tiên được khớp và đầu ra là

class SortImpl implements Sort
{

…}
2

So sánh danh tính

#[Attribute(Attribute::TARGET_CLASS|Attribute::IS_REPEATABLE)]
class SortType {

function __construct($sortType){
        $this->sortType = $sortType;
    }
}
35 có thể được áp dụng cho các giá trị tùy ý ngay cả khi không có giá trị nào được trả về. Giá trị
#[Attribute(Attribute::TARGET_CLASS|Attribute::IS_REPEATABLE)]
class SortType {

function __construct($sortType){
        $this->sortType = $sortType;
    }
}
27 do khớp trả về có thể được gán cho một biến. Tập lệnh sau khớp với giá trị
#[Attribute(Attribute::TARGET_CLASS|Attribute::IS_REPEATABLE)]
class SortType {

function __construct($sortType){
        $this->sortType = $sortType;
    }
}
27 và điều kiện đầu tiên được khớp

class SortImpl implements Sort
{

…}
3

Gọi tập lệnh bằng url http. //máy chủ cục bộ. 8000/tập lệnh/mẫu. php và đầu ra là

#[Attribute(Attribute::TARGET_CLASS|Attribute::IS_REPEATABLE)]
class SortType {

function __construct($sortType){
        $this->sortType = $sortType;
    }
}
27

Nhiều điều kiện có thể được phân tách bằng dấu phẩy

Nhiều biểu thức điều kiện có thể được phân tách bằng dấu phẩy. Đầu tiên, một ví dụ với các điều kiện duy nhất như trong tập lệnh sau.  

class SortImpl implements Sort
{

…}
4

đầu ra là

class SortImpl implements Sort
{

…}
5

Lấy ví dụ tương tự và thêm nhiều điều kiện được phân tách bằng dấu phẩy

class SortImpl implements Sort
{

…}
6

Từ 'puush' sai chính tả được liệt kê là phương án thay thế thứ hai trong danh sách biểu thức điều kiện đầu tiên được so khớp và đầu ra là

class SortImpl implements Sort
{

…}
5

kiệt sức

Biểu thức

public string $sortType="";
public $arrayToSort=array("B", "A", "f", "C");
4 phải đầy đủ. Trong tập lệnh sau, biểu thức chủ đề không phù hợp với bất kỳ điều kiện nào

class SortImpl implements Sort
{

…}
8

Kết quả là, một lỗi được xuất ra

class SortImpl implements Sort
{

…}
9

Toán tử public string $sortType=""; public $arrayToSort=array("B", "A", "f", "C"); 6 hỗ trợ biểu thức tùy ý

Một tính năng mới khác là toán tử instanceof chấp nhận bất kỳ biểu thức tùy ý nào. Hai yêu cầu duy nhất là

  • Biểu thức phải được bao bọc trong dấu ngoặc đơn và
  • Biểu thức phải đánh giá thành một chuỗi.  

Để chứng minh toán tử

public string $sortType="";
public $arrayToSort=array("B", "A", "f", "C");
6 mới, hãy tạo một mẫu tập lệnh PHP. php. Khai báo ba biến cho các tập hợp thuộc các loại khác nhau, chẳng hạn như
#[Attribute(Attribute::TARGET_CLASS|Attribute::IS_REPEATABLE)]
class SortType {

function __construct($sortType){
        $this->sortType = $sortType;
    }
}
19 và
#[Attribute(Attribute::TARGET_CLASS|Attribute::IS_REPEATABLE)]
class SortType {

function __construct($sortType){
        $this->sortType = $sortType;
    }
}
43

public string $sortType="";
public $arrayToSort=array("B", "A", "f", "C");
0

Thêm một hàm tùy ý trả về một lớp, chẳng hạn như \Ds\Vector. lớp dưới dạng một chuỗi.  

public string $sortType="";
public $arrayToSort=array("B", "A", "f", "C");
1

Xuất kết quả cho việc sử dụng toán tử

public string $sortType="";
public $arrayToSort=array("B", "A", "f", "C");
6 với các biến tập hợp khác nhau. Toán tử
public string $sortType="";
public $arrayToSort=array("B", "A", "f", "C");
6 nhận một biểu thức đánh giá thành một chuỗi trong mỗi lệnh gọi. Mẫu. php được liệt kê

public string $sortType="";
public $arrayToSort=array("B", "A", "f", "C");
2

Tập lệnh chạy ok với PHP 8 và tạo đầu ra

Trình biên dịch
public string $sortType="";
public $arrayToSort=array("B", "A", "f", "C");
3JIT(Just-In-Time)

PHP 8 giới thiệu trình biên dịch Just-in-time (JIT) với các mục tiêu sau

  • Cải thiện hiệu suất và khả năng sử dụng
  • Làm cho PHP phù hợp với các trường hợp sử dụng CPU không dành cho Web, nơi có thể mong đợi các lợi ích hiệu suất đáng kể
  • Tạo tiềm năng sử dụng PHP, thay vì C, để phát triển các chức năng tích hợp. PHP có thể là một giải pháp thay thế tốt hơn vì nó không có các vấn đề về tràn và quản lý bộ nhớ giống như C.  

Hai công cụ biên dịch JIT được giới thiệu. Truy tìm JIT và chức năng JIT. Chức năng JIT chỉ tối ưu hóa mã trong phạm vi của một chức năng duy nhất, trong khi Truy tìm JIT tối ưu hóa toàn bộ dấu vết ngăn xếp. Truy tìm JIT được hiển thị để cải thiện hiệu suất gấp 3 lần trên các điểm chuẩn tổng hợp và 1. 5 đến 2 lần đối với các truy vấn chạy dài. Theo dõi JIT được hiển thị để cải thiện hiệu suất hơn 4 lần trên tiêu chuẩn Mandelbrot.  

Trong bài viết này, chúng tôi đã giới thiệu một số cải tiến phù hợp nhất đối với cú pháp PHP 8, bao gồm các thuộc tính, toán tử mới, biểu thức đối sánh, v.v. Trong bài viết tiếp theo, chúng ta sẽ khám phá những cải tiến đối với các lớp và hàm tạo

 

Bài viết này là một phần của loạt bài viết "PHP 8. x". Bạn có thể đăng ký để nhận thông báo về các bài viết mới trong loạt bài này qua RSS

PHP tiếp tục là một trong những ngôn ngữ kịch bản được sử dụng rộng rãi nhất trên web với 77. 3% của tất cả các trang web có ngôn ngữ lập trình phía máy chủ được biết là sử dụng nó theo w3tech. PHP 8 mang đến nhiều tính năng mới và những cải tiến khác mà chúng ta sẽ khám phá trong loạt bài viết này

Thông tin về các Tác giả

Deepak Vohra

Hiển thị thêmHiển thị ít hơn

Lấy cảm hứng từ nội dung này?

Trở thành biên tập viên cho InfoQ là một trong những quyết định sáng suốt nhất trong sự nghiệp của tôi. Nó đã thử thách tôi và giúp tôi trưởng thành theo nhiều cách. Chúng tôi muốn có nhiều người tham gia nhóm của chúng tôi

Làm thế nào để bạn xác định các thuộc tính trong PHP?

Thomas Betts Trưởng ban biên tập, Thiết kế và kiến ​​trúc phần mềm @InfoQ;

Viết cho InfoQ

Xếp hạng bài viết này

nhận con nuôi

Phong cách

Đã liên hệ với tác giả

Nội dung này nằm trong chủ đề Đám mây

chủ đề liên quan
  • Phát triển
  • PHP8
  • PHP
  • Ngôn ngữ lập trình
  • Lập trình hệ thống
  • NGUỒN SÁNG
  • Đám mây
  • PHP8. x Loạt bài báo

  • biên tập liên quan

  • Phổ biến trên InfoQ

    • Microsoft ra mắt VALL-E, Mô hình ngôn ngữ TTS thay đổi cuộc chơi
    • Các nhà phát triển AI phát hành triển khai mã nguồn mở của thuật toán đào tạo ChatGPT
    • Google cung cấp hướng dẫn toàn diện về độ tin cậy của cơ sở hạ tầng đám mây
    • Báo cáo Kubernetes cho thấy khối lượng công việc được định cấu hình kém đang gia tăng
    • Cách Palo Alto tiếp cận Kỹ thuật nền tảng
    • Trao quyền cho phụ nữ trong lĩnh vực STEM & Xây dựng các nhóm hòa nhập thông qua nấu ăn

Nội dung liên quan

  • PHP 8 - Các lớp và Enum

    Làm thế nào để bạn xác định các thuộc tính trong PHP?

  • PHP 8 - Cải tiến hệ thống loại

    Làm thế nào để bạn xác định các thuộc tính trong PHP?

  • PHP 8 – Hàm và Phương thức

    Làm thế nào để bạn xác định các thuộc tính trong PHP?

  • AWS Lambda hiện hỗ trợ đồng thời tối đa cho SQS dưới dạng nguồn sự kiện

  • Sáu cách tối ưu hóa WebAssembly

    Làm thế nào để bạn xác định các thuộc tính trong PHP?

  • Google cung cấp hướng dẫn toàn diện về độ tin cậy của cơ sở hạ tầng đám mây

  • Tính năng phân tích nhật ký trong nhật ký đám mây hiện có sẵn rộng rãi

  • Amazon Athena hiện hỗ trợ Apache Spark Engine

  • API xác thực địa chỉ của Google thường có sẵn để cải thiện độ chính xác của địa chỉ

  • Cách kiểm tra ranh giới cách ly lỗi của bạn trong đám mây

    Làm thế nào để bạn xác định các thuộc tính trong PHP?

  • AWS phát hành SimSpace Weaver cho mô phỏng không gian thời gian thực

  • Dịch vụ chuyển bộ nhớ của Google hiện hỗ trợ khả năng sao chép thời gian thực không cần máy chủ

  • Amazon S3 mã hóa tất cả các đối tượng mới bằng AES-256

  • AWS giới thiệu Bản đồ phân tán chức năng bước để xử lý dữ liệu song song quy mô lớn

  • Microfrontends chống mẫu. Bảy năm trong chiến hào

    Làm thế nào để bạn xác định các thuộc tính trong PHP?

  • Truy cập Zero Trust vào các ứng dụng doanh nghiệp với AWS Verified Access

  • Google Cloud giới thiệu các hành động nhạy cảm để cải thiện bảo mật cho tài khoản trả phí

  • Sử dụng công cụ mã để chèn lỗi ở cấp ứng dụng tại eBay

  • Kích thước máy ảo Ebsv5 được tối ưu hóa bộ nhớ mới của Microsoft trong Bản xem trước mang lại hiệu suất cao hơn

  • Cách Starling xây dựng bộ xử lý thẻ của riêng họ

    Làm thế nào để bạn xác định các thuộc tính trong PHP?

  • InfoQ eMag - Báo cáo xu hướng InfoQ 2022

    Làm thế nào để bạn xác định các thuộc tính trong PHP?

  • Bơm nó lên. Thực sự thu được lợi ích từ Cloud Native Microservices

    Làm thế nào để bạn xác định các thuộc tính trong PHP?

  • Các tiêu chuẩn cộng đồng xung đột, bản địa đám mây và viễn thông

    Làm thế nào để bạn xác định các thuộc tính trong PHP?

  • Sử dụng Serverless WebSockets để kích hoạt tính năng nhắn tin theo thời gian thực

    Làm thế nào để bạn xác định các thuộc tính trong PHP?

  • Các bản phát hành mang tính quyết định, có thể tái sản xuất, không gây ngạc nhiên trong Kỷ nguyên không có máy chủ

    Làm thế nào để bạn xác định các thuộc tính trong PHP?

  • CloudFormation hoặc Terraform. Nền tảng Iac nào phù hợp nhất với bạn?

    Làm thế nào để bạn xác định các thuộc tính trong PHP?

  • Hành trình đến với quản lý API trên đám mây

    Làm thế nào để bạn xác định các thuộc tính trong PHP?

  • Bảo mật API và microservice trong đám mây

    Làm thế nào để bạn xác định các thuộc tính trong PHP?

  • Xây dựng, thử nghiệm và triển khai API REST có thể mở rộng trong Go

    Làm thế nào để bạn xác định các thuộc tính trong PHP?

  • Giao tiếp vi dịch vụ Polyglot bằng Dapr trên AKS

    Làm thế nào để bạn xác định các thuộc tính trong PHP?

  • Chuyển sang phương pháp tiếp cận trái để chuẩn hóa API

    Làm thế nào để bạn xác định các thuộc tính trong PHP?

  • Xây dựng hệ thống giao thông hiện đại với KubeEdge. Làm thế nào chúng tôi thực hiện nó

    Làm thế nào để bạn xác định các thuộc tính trong PHP?

  • Trò chuyện bên lò sưởi với Docker CTO

    Làm thế nào để bạn xác định các thuộc tính trong PHP?

  • Chọn cơ sở hạ tầng đám mây phù hợp cho khởi nghiệp SaaS của bạn

    Làm thế nào để bạn xác định các thuộc tính trong PHP?

  • Xây dựng quy trình làm việc với AWS Step Functions

    Làm thế nào để bạn xác định các thuộc tính trong PHP?

  • Xây dựng ứng dụng từ Edge đến Cloud

    Làm thế nào để bạn xác định các thuộc tính trong PHP?

  • Zero Trust có ý nghĩa gì đối với Kubernetes?

    Làm thế nào để bạn xác định các thuộc tính trong PHP?

  • Chức năng mạng gốc trên đám mây có ở đây

    Làm thế nào để bạn xác định các thuộc tính trong PHP?

  • Cơ sở hạ tầng như một mã — Tại sao quản lý Drift là không đủ

    Làm thế nào để bạn xác định các thuộc tính trong PHP?

  • InfoQ eMag - Mô hình vận hành đám mây

    Làm thế nào để bạn xác định các thuộc tính trong PHP?

Bản tin InfoQ

Tổng hợp nội dung của tuần trước trên InfoQ được gửi vào thứ Ba hàng tuần. Tham gia cộng đồng hơn 250.000 nhà phát triển cấp cao. Xem một ví dụ

Nhập địa chỉ email của bạn

Chọn quốc gia của bạn Tôi đồng ý với InfoQ. com xử lý dữ liệu của tôi như được giải thích trong Thông báo về quyền riêng tư này.

Chúng tôi bảo vệ quyền riêng tư của bạn

xin chào người lạ

Bạn cần Đăng ký tài khoản InfoQ hoặc Đăng nhập hoặc đăng nhập để gửi bình luận. Nhưng còn rất nhiều điều đằng sau việc đăng ký

Làm cách nào để lấy giá trị thuộc tính trong PHP?

Phần tử DOME. Hàm getAttribute() là một hàm có sẵn trong PHP, dùng để lấy giá trị của thuộc tính có tên cho nút hiện tại. Thông số. Hàm này chấp nhận một tham số duy nhất $name chứa tên của thuộc tính.

Tại sao lại sử dụng thuộc tính trong PHP?

Các thuộc tính cung cấp khả năng thêm thông tin siêu dữ liệu có cấu trúc, máy có thể đọc được trên các khai báo trong mã . Các lớp, phương thức, hàm, tham số, thuộc tính và hằng số lớp có thể là mục tiêu của một thuộc tính. Sau đó, siêu dữ liệu được xác định bởi các thuộc tính có thể được kiểm tra trong thời gian chạy bằng API phản chiếu.

Thuộc tính trong CPP là gì?

Các thuộc tính là các cách hiện đại trong C++ để chuẩn hóa mọi thứ nếu mã của chúng chạy trên các trình biên dịch khác nhau . Các thuộc tính được sử dụng để cung cấp một số thông tin bổ sung được sử dụng để thực thi các điều kiện (ràng buộc), tối ưu hóa và tạo mã cụ thể nếu được yêu cầu.