PHP8.1 ciri-ciri baru menjelaskan pemula pemula

藏色散人
Lepaskan: 2023-02-17 12:14:02
asal
2956 orang telah melayarinya

Artikel ini ialah terjemahan, alamat asal: https://stitcher.io/blog/php-81-new-in-initializers

PHP 8.1: Initializer ( baharu dalam pemula)

PHP 8.1 menambah butiran yang kelihatan kecil, tetapi saya fikir ia akan memberi kesan hari ke hari yang ketara kepada ramai orang. Jadi tentang apa "Apa yang baharu dalam Initializer RFC" ini? Mari lihat contoh; kita semua telah menulis kod seperti ini:

class MyStateMachine
{
    public function __construct(
        private ?State $state = null,
    ) {
        $this->state ??= new InitialState();
    }
}
Salin selepas log masuk

Dalam contoh mesin keadaan ini, kami mahu menstruktur kelas kami dalam dua cara: dengan dan tanpa keadaan awal. Jika kita membinanya tanpa keadaan awal, kita mahu menetapkan keadaan lalai. PHP pastinya menyokong penetapan nilai awal secara langsung dalam senarai parameter, tetapi hanya untuk jenis primitif. Sebagai contoh, jika mesin keadaan kita menggunakan rentetan secara dalaman dan bukannya objek, kita boleh menulis pembinanya seperti ini:

class MyStateMachine
{
    public function __construct(
        private string $state = 'initial',
    ) {
    }
}
Salin selepas log masuk

Jadi, dalam PHP 8.1, kita juga boleh menggunakan perkara yang sama untuk objek "nilai lalai" sintaks. Dalam erti kata lain: anda boleh menggunakan parameter lalai baharu (ini ialah contoh "pemula":

class MyStateMachine
{
    public function __construct(
        private State $state = new InitialState(),
    ) {
    }
}
Salin selepas log masuk

"Pemula" bukan sekadar lalai parameter, berikut ialah penjelasan ringkas daripada RFC :

RFC ini mencadangkan untuk membenarkan ungkapan baharu dalam lalai parameter, parameter sifat, pemula pembolehubah statik dan pemula pemalar global

Anda membacanya dengan betul: Hartanah juga terdapat dalam senarai ini! Bayangkan perpustakaan pengesahan mudah yang menggunakan atribut untuk mengesahkan input kepada sifat. Mungkin ia sepatutnya dapat mengesahkan elemen tatasusunan seperti ini:

class CreateEmailsRequest extends FormRequestData
{
    #[ValidArray(
        email: [new Required, new ValidEmail],
        name: [new Required, new ValidString],
    )]
    public array $people;
}
Salin selepas log masuk

Sebelum PHP 8.1 anda tidak akan dapat menulis kod tersebut kerana anda tidak dibenarkan menggunakan atribut baharu kerana sifatnya dinilai, Tetapi sekarang anda boleh!

Mari kita lihat beberapa butiran penting yang patut disebut.

Adakah anda ingin mengetahui lebih lanjut tentang PHP 8.1? Terdapat laluan ke PHP 8.1. Untuk 10 hari seterusnya, anda akan menerima e-mel harian tentang ciri baharu dan sedia ada PHP 8.1, anda kemudiannya akan dinyahlanggan secara automatik supaya anda tidak akan menerima e-mel spam atau susulan. Langgan sekarang!

#Bina hanya apabila diperlukan

"Nilai baharu" ini hanya akan dibina apabila benar-benar diperlukan. Ini bermakna, dalam contoh pertama kami, InitialState hanya akan mencipta objek baharu jika tiada hujah diberikan:

class MyStateMachine
{
    public function __construct(
        private State $state = new InitialState(),
    ) {
    }
}
new MyStateMachine(new DraftState()); // No InitialState is created
new MyStateMachine(); // But now it is
Salin selepas log masuk

Sebagai contoh, dalam kes sifat, hanya newInstance akan Objek dibuat hanya apabila dipanggil .

# Tiada dalam atribut kelas

Anda juga harus tahu bahawa baharu tidak boleh digunakan sebagai nilai lalai dalam atribut kelas. Menyokong ciri ini memperkenalkan beberapa kesan sampingan yang tidak dijangka, contohnya, apabila mensiri dan menyahsiri objek.

class MyStateMachine
{
    private State $state = new InitialState();
}
Salin selepas log masuk

Nasib baik, kami mempunyai sifat angkat yang membenarkan nilai lalai, kerana PHP akan menukar sintaks angkat harta untuk meninggalkan nilai lalai dalam parameter pembina, tetapi bukan dalam harta sebenar.

Berikut ialah versi terjemahan:

class MyStateMachine
{
    private State $state;
    
    public function __construct(
        State $state = new InitialState(),
    ) {
        $this->state = $state;
    }
}
Salin selepas log masuk

# Input terhad

Anda mungkin telah menekanya, tetapi ia dibina dalam pemula Semasa mencipta objek baru, anda hanya boleh lulus set input terhad. Sebagai contoh, anda tidak boleh menggunakan pembolehubah, pengendali penyebaran, kelas tanpa nama, dsb. Namun, ia adalah tambahan yang sangat dialu-alukan!

Atas ialah kandungan terperinci PHP8.1 ciri-ciri baru menjelaskan pemula pemula. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!