Rumah >pembangunan bahagian belakang >tutorial php >PHP ews: Promosi Harta Pembina

PHP ews: Promosi Harta Pembina

Susan Sarandon
Susan Sarandonasal
2024-12-14 06:41:11820semak imbas

PHP ews: Constructor Property Promotion

Promosi Harta Pembina ialah ciri yang diperkenalkan dalam PHP 8 yang memudahkan pengisytiharan dan permulaan harta dalam kelas. Sebelum PHP 8, anda perlu mengisytiharkan sifat kelas secara eksplisit dan kemudian memulakannya di dalam pembina. Dengan ciri ini, anda boleh mengisytiharkan dan memulakan sifat terus dalam senarai parameter pembina, mengurangkan kod boilerplate.

Sintaks Tradisional (Sebelum PHP 8)

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

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

Sintaks Promosi Harta Pembina (PHP 8)

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

Kebaikan

  1. Mengurangkan Kod Boilerplate:

    • Menghapuskan keperluan untuk mengisytiharkan sifat di luar pembina dan memulakannya secara manual.
  2. Meningkatkan Kebolehbacaan:

    • Menjadikan kod lebih ringkas dan lebih mudah difahami, terutamanya dalam kelas yang mempunyai banyak sifat.
  3. Menyokong Ketidakbolehubah:

    • Sifat boleh ditanda sebagai baca sahaja (diperkenalkan dalam PHP 8.1) untuk mengelakkan perubahan selepas pemula.

Nota

  1. Pengubah Keterlihatan:

    • Hartanah yang dipromosikan mesti termasuk pengubah keterlihatan (peribadi, dilindungi atau awam).
  2. Nilai Lalai:

    • Anda tidak boleh menetapkan nilai lalai secara langsung untuk sifat yang dipromosikan, tetapi anda boleh menggunakan nilai argumen lalai dalam pembina.
    class Product {
       public function __construct(
           private string $name = 'Unnamed',
           private float $price = 0.0
       ) {}
    }
    
  3. Mencampurkan Hartanah Digalakkan dan Tidak Digalakkan:

    • Anda boleh menggabungkan hartanah tradisional dan hartanah yang dipromosikan dalam kelas yang sama.
    class Product {
       private string $category;
    
       public function __construct(
           private string $name,
           private float $price
       ) {
           $this->category = 'General';
       }
    }
    

Kes Penggunaan

Promosi Harta Pembina amat berguna untuk kelas mudah seperti DTO (Objek Pemindahan Data), di mana tujuan utamanya adalah untuk menyimpan data.

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

Kesimpulan

Promosi Harta Pembina ialah ciri hebat dalam PHP 8 yang meningkatkan produktiviti dan mengurangkan kerumitan kod. Ia sesuai untuk kelas dengan berbilang sifat yang memerlukan permulaan yang ringkas dan jelas.

Penyepaduan atribut

Dalam PHP 8, Atribut (juga dikenali sebagai Anotasi) boleh digabungkan dengan lancar dengan Promosi Harta Pembina, menghasilkan kod yang lebih bersih dan lebih ekspresif, terutamanya dalam senario di mana metadata perlu dikaitkan dengan sifat.

Integrasi dengan Promosi Hartanah Pembina

Dengan Promosi Hartanah Pembina, sifat ditakrifkan terus dalam pembina. Anda boleh menggunakan Atribut untuk menghiasi sifat ini dan menambah maklumat kontekstual tanpa perlu mengisytiharkan sifat tersebut secara berasingan.

Contoh Praktikal

Andaikan anda sedang mengusahakan DTO (Data Transfer Object) dan ingin memetakan sifat kepada lajur pangkalan data

Tanpa Promosi Hartanah Pembina

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

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

Dengan Promosi Hartanah Pembina

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

Faedah Integrasi

  1. Kod Boilerplate Terkurang:

    • Sifat digalakkan menghapuskan pengisytiharan pendua dan Atribut boleh digunakan terus pada sifat pembina.
  2. Kod Lebih Bersih, Lebih Boleh Dibaca:

    • Penyepaduan menggabungkan pemulaan, metadata dan keterlihatan di satu tempat.
  3. Fleksibiliti dengan Refleksi:

    • Anda boleh menggunakan API Refleksi PHP untuk mengakses dan memproses Atribut yang digunakan pada sifat yang dipromosikan.

Mengakses Atribut dengan Refleksi

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

Penjelasan Kod

  1. Mentakrifkan Atribut Lajur:

    • Penghias #[Attribute] menunjukkan bahawa kelas Lajur ialah atribut.
    • Kelas atribut menerima nama parameter tunggal, yang digunakan untuk mengaitkan sifat dengan lajur pangkalan data.
  2. Menambahkan Atribut pada Parameter Pembina:

    • Atribut seperti #[Column('user_id')] dan #[Column('username')] ditambahkan pada id dan nama parameter pembina.
  3. Menggunakan Refleksi:

    • Objek ReflectionClass dicipta untuk kelas Pengguna, membolehkan kami memeriksa sifat dan kaedahnya.
  4. Mengakses Pembina:

    • getConstructor() mendapatkan semula pembina kelas Pengguna.
  5. Lelaran Melewati Parameter:

    • getParameters() mendapatkan semula semua parameter pembina.
  6. Mengambil Atribut:

    • getAttributes(Column::class) mendapatkan semula semua atribut jenis Column yang digunakan pada parameter.
  7. Membuat Atribut:

    • newInstance() mencipta tika atribut Column, memberikan akses kepada sifat namanya.
  8. Metadata Mencetak:

    • Mengoutputkan nama parameter (cth., id) dan nama lajur yang berkaitan (cth., user_id) ke konsol.

Output:

class Product {
   private string $category;

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

Kes Penggunaan Biasa

  1. Pemetaan Pangkalan Data:

    • Menggunakan atribut seperti #[Column] untuk menentukan lajur pangkalan data.
  2. Pengesahan Data:

    • Memohon pengesahan terus pada sifat, seperti #[NotNull] atau #[MaxLength(255)].
  3. Siri/Penyahserikatan:

    • Memetakan sifat ke medan JSON, cth., #[JsonField('user_name')].

Kesimpulan

Penyatuan Promosi Harta Pembina dengan Atribut menyediakan cara yang berkuasa dan ringkas untuk menstruktur kelas dalam PHP. Ini amat berguna dalam sistem yang bergantung pada metadata, seperti ORM, pengesahan atau siri, menjadikan kod lebih ekspresif dan teratur.

Atas ialah kandungan terperinci PHP ews: Promosi Harta Pembina. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn