国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁 后端開發(fā) php教程 PHP ews:構(gòu)造函數(shù)屬性提升

PHP ews:構(gòu)造函數(shù)屬性提升

Dec 14, 2024 am 06:41 AM

PHP ews: Constructor Property Promotion

構(gòu)造函數(shù)屬性提升 是 PHP 8 中引入的一項(xiàng)功能,可簡(jiǎn)化類中的屬性聲明和初始化。在 PHP 8 之前,您必須顯式聲明類屬性,然后在構(gòu)造函數(shù)中初始化它們。通過此功能,您可以直接在構(gòu)造函數(shù)的參數(shù)列表中聲明和初始化屬性,從而減少樣板代碼。

傳統(tǒng)語法(PHP 8 之前)

class Product {
    private string $name;
    private float $price;

    public function __construct(string $name, float $price) {
        $this->name = $name;
        $this->price = $price;
    }
}

構(gòu)造函數(shù)屬性提升語法 (PHP 8)

class Product {
    public function __construct(
        private string $name,
        private float $price
    ) {}
}

好處

  1. 減少樣板代碼:

    • 無需在構(gòu)造函數(shù)外部聲明屬性并手動(dòng)初始化它們。
  2. 提高可讀性

    • 使代碼更加簡(jiǎn)潔、更容易理解,尤其是在具有許多屬性的類中。
  3. 支持不變性:

    • 屬性可以標(biāo)記為只讀(在 PHP 8.1 中引入),以防止初始化后發(fā)生更改。

筆記

  1. 可見性修飾符

    • 升級(jí)的屬性必須包含可見性修飾符(私有、受保護(hù)或公共)。
  2. 默認(rèn)值

    • 您不能直接為提升的屬性設(shè)置默認(rèn)值,但您可以在構(gòu)造函數(shù)中使用默認(rèn)參數(shù)值。
    class Product {
       public function __construct(
           private string $name = 'Unnamed',
           private float $price = 0.0
       ) {}
    }
    
  3. 混合促銷和非促銷屬性

    • 您可以將傳統(tǒng)屬性和升級(jí)屬性組合在同一類別中。
    class Product {
       private string $category;
    
       public function __construct(
           private string $name,
           private float $price
       ) {
           $this->category = 'General';
       }
    }
    

用例

構(gòu)造函數(shù)屬性提升對(duì)于像DTO(數(shù)據(jù)傳輸對(duì)象)這樣的簡(jiǎn)單類特別有用,其中主要目的是存儲(chǔ)數(shù)據(jù)。

class CustomerDTO {
    public function __construct(
        public string $name,
        public string $email,
        public ?string $phone = null
    ) {}
}

結(jié)論

構(gòu)造函數(shù)屬性提升是 PHP 8 中的一項(xiàng)強(qiáng)大功能,可以提高生產(chǎn)力并降低代碼復(fù)雜性。對(duì)于需要簡(jiǎn)潔明了初始化的具有多個(gè)屬性的類來說,它是理想的選擇。

屬性整合

在 PHP 8 中,屬性(也稱為注解)可以與構(gòu)造函數(shù)屬性提升無縫結(jié)合,從而產(chǎn)生更干凈、更具表現(xiàn)力的代碼,尤其是在元數(shù)據(jù)需要與屬性關(guān)聯(lián)的場(chǎng)景中。

與建筑商房產(chǎn)促銷整合

通過構(gòu)造函數(shù)屬性提升,屬性直接在構(gòu)造函數(shù)中定義。您可以使用 Attributes 來裝飾這些屬性并添加上下文信息,而無需單獨(dú)聲明屬性。

實(shí)際示例

假設(shè)您正在處理 DTO(數(shù)據(jù)傳輸對(duì)象)并希望將屬性映射到數(shù)據(jù)庫列

沒有建筑商房產(chǎn)促銷

class Product {
    private string $name;
    private float $price;

    public function __construct(string $name, float $price) {
        $this->name = $name;
        $this->price = $price;
    }
}

與建筑商房產(chǎn)促銷

class Product {
    public function __construct(
        private string $name,
        private float $price
    ) {}
}

集成的好處

  1. 減少樣板代碼

    • 提升屬性消除了重復(fù)聲明,并且屬性可以直接應(yīng)用于構(gòu)造函數(shù)的屬性。
  2. 更干凈、更易讀的代碼:

    • 集成將初始化、元數(shù)據(jù)和可見性合并在一處。
  3. 反思的靈活性

    • 您可以使用 PHP 的 Reflection API 來訪問和處理應(yīng)用于升級(jí)屬性的屬性。

通過反射訪問屬性

class Product {
   public function __construct(
       private string $name = 'Unnamed',
       private float $price = 0.0
   ) {}
}

代碼說明

  1. 定義列屬性:

    • #[Attribute] 裝飾器表明 Column 類是一個(gè)屬性。
    • 屬性類接受單個(gè)參數(shù)名稱,用于將屬性與數(shù)據(jù)庫列關(guān)聯(lián)起來。
  2. 為構(gòu)造函數(shù)參數(shù)添加屬性:

    • 像 #[Column('user_id')] 和 #[Column('username')] 這樣的屬性被添加到構(gòu)造函數(shù)參數(shù) id 和 name 中。
  3. 使用反射:

    • ReflectionClass 對(duì)象是為 User 類創(chuàng)建的,允許我們檢查它的屬性和方法。
  4. 訪問構(gòu)造函數(shù):

    • getConstructor() 檢索 User 類的構(gòu)造函數(shù)。
  5. 迭代參數(shù):

    • getParameters() 檢索構(gòu)造函數(shù)的所有參數(shù)。
  6. 獲取屬性:

    • getAttributes(Column::class) 檢索應(yīng)用于參數(shù)的 Column 類型的所有屬性。
  7. 實(shí)例化屬性:

    • newInstance() 創(chuàng)建 Column 屬性的實(shí)例,提供對(duì)其 name 屬性的訪問。
  8. 打印元數(shù)據(jù):

    • 將參數(shù)名稱(例如,id)及其關(guān)聯(lián)的列名稱(例如,user_id)輸出到控制臺(tái)。

輸出:

class Product {
   private string $category;

   public function __construct(
       private string $name,
       private float $price
   ) {
       $this->category = 'General';
   }
}

常見用例

  1. 數(shù)據(jù)庫映射:

    • 使用#[Column]等屬性來指定數(shù)據(jù)庫列。
  2. 數(shù)據(jù)驗(yàn)證:

    • 直接對(duì)屬性應(yīng)用驗(yàn)證,例如#[NotNull] 或#[MaxLength(255)]。
  3. 序列化/反序列化:

    • 將屬性映射到 JSON 字段,例如 #[JsonField('user_name')].

結(jié)論

構(gòu)造函數(shù)屬性提升屬性的集成提供了一種在PHP中構(gòu)建類的強(qiáng)大而簡(jiǎn)潔的方法。這在依賴元數(shù)據(jù)(例如 ORM、驗(yàn)證或序列化)的系統(tǒng)中特別有用,使代碼更具表現(xiàn)力和組織性。

以上是PHP ews:構(gòu)造函數(shù)屬性提升的詳細(xì)內(nèi)容。更多信息請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請(qǐng)聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動(dòng)的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機(jī)

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強(qiáng)大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)代碼編輯軟件(SublimeText3)

如何在PHP中實(shí)施身份驗(yàn)證和授權(quán)? 如何在PHP中實(shí)施身份驗(yàn)證和授權(quán)? Jun 20, 2025 am 01:03 AM

tosecurelyhandleauthenticationandationallizationInphp,lofterTheSesteps:1.AlwaysHashPasswordSwithPassword_hash()andverifyusingspasspassword_verify(),usepreparedStatatementStopreventsqlineptions,andStoreSeruserDatain usseruserDatain $ _sessiveferterlogin.2.implementrole-2.imaccessccsccccccccccccccccccccccccc.

我如何了解最新的PHP開發(fā)和最佳實(shí)踐? 我如何了解最新的PHP開發(fā)和最佳實(shí)踐? Jun 23, 2025 am 12:56 AM

TostaycurrentwithPHPdevelopmentsandbestpractices,followkeynewssourceslikePHP.netandPHPWeekly,engagewithcommunitiesonforumsandconferences,keeptoolingupdatedandgraduallyadoptnewfeatures,andreadorcontributetoopensourceprojects.First,followreliablesource

什么是PHP,為什么它用于Web開發(fā)? 什么是PHP,為什么它用于Web開發(fā)? Jun 23, 2025 am 12:55 AM

PHPbecamepopularforwebdevelopmentduetoitseaseoflearning,seamlessintegrationwithHTML,widespreadhostingsupport,andalargeecosystemincludingframeworkslikeLaravelandCMSplatformslikeWordPress.Itexcelsinhandlingformsubmissions,managingusersessions,interacti

如何設(shè)置PHP時(shí)區(qū)? 如何設(shè)置PHP時(shí)區(qū)? Jun 25, 2025 am 01:00 AM

tosetTherightTimeZoneInphp,restate_default_timezone_set()functionAtthestArtofyourscriptWithavalIdidentIdentifiersuchas'america/new_york'.1.usedate_default_default_timezone_set_set()

如何在操作系統(tǒng)(Windows,MacOS,Linux)上安裝PHP? 如何在操作系統(tǒng)(Windows,MacOS,Linux)上安裝PHP? Jun 20, 2025 am 01:02 AM

安裝PHP的方法因操作系統(tǒng)而異,以下是具體步驟:1.Windows用戶可使用XAMPP一鍵安裝包或手動(dòng)配置,下載XAMPP并安裝,選擇PHP組件或?qū)HP加入環(huán)境變量;2.macOS用戶可通過Homebrew安裝PHP,運(yùn)行相應(yīng)命令安裝并配置Apache服務(wù)器;3.Linux用戶(Ubuntu/Debian)可使用APT包管理器更新源后安裝PHP及常用擴(kuò)展,并通過創(chuàng)建測(cè)試文件驗(yàn)證安裝是否成功。

我如何驗(yàn)證PHP中的用戶輸入以確保其符合某些標(biāo)準(zhǔn)? 我如何驗(yàn)證PHP中的用戶輸入以確保其符合某些標(biāo)準(zhǔn)? Jun 22, 2025 am 01:00 AM

TovalidateuserinputinPHP,usebuilt-invalidationfunctionslikefilter_var()andfilter_input(),applyregularexpressionsforcustomformatssuchasusernamesorphonenumbers,checkdatatypesfornumericvalueslikeageorprice,setlengthlimitsandtrimwhitespacetopreventlayout

如何使用session_destroy()在PHP中破壞會(huì)話? 如何使用session_destroy()在PHP中破壞會(huì)話? Jun 20, 2025 am 01:06 AM

要完全銷毀PHP中的會(huì)話,必須先調(diào)用session_start()啟動(dòng)會(huì)話,再調(diào)用session_destroy()刪除所有會(huì)話數(shù)據(jù)。1.首先使用session_start()確保會(huì)話已啟動(dòng);2.然后調(diào)用session_destroy()清除會(huì)話數(shù)據(jù);3.可選但推薦:手動(dòng)unset$_SESSION數(shù)組以清除全局變量;4.同時(shí)刪除會(huì)話cookie,防止用戶保留會(huì)話狀態(tài);5.最后注意在銷毀后重定向用戶,并避免立即復(fù)用會(huì)話變量,否則需重新啟動(dòng)會(huì)話。這樣做能確保用戶徹底退出系統(tǒng),不留殘留信息。

什么是php(serialize(),Unserialize())中的數(shù)據(jù)序列化? 什么是php(serialize(),Unserialize())中的數(shù)據(jù)序列化? Jun 22, 2025 am 01:03 AM

thephpfunctionserize()andunSerialize()redustoconvertComplexdatStructDestoresToroStoroStoroSandaBackagagain.1.Serialize()

See all articles