Rumah > pembangunan bahagian belakang > tutorial php > Mengapa PHP Throw \'Harta Yang Ditaip Mesti Tidak Dicapai Sebelum Dimulakan\'?

Mengapa PHP Throw \'Harta Yang Ditaip Mesti Tidak Dicapai Sebelum Dimulakan\'?

Barbara Streisand
Lepaskan: 2024-11-17 07:05:03
asal
307 orang telah melayarinya

Why Does PHP Throw

Mengapa "Harta Ditaip Mesti Tidak Dicapai Sebelum Dimulakan" Timbul Ralat dengan Petunjuk Jenis Harta

PHP 7.4 memperkenalkan pembayang jenis untuk hartanah, menekankan keperluan untuk menyediakan nilai yang sah untuk semua sifat. Walau bagaimanapun, mengakses sifat tanpa memberikannya boleh membawa kepada ralat, kerana sifat yang tidak ditentukan tidak sepadan dengan jenis yang diisytiharkan.

Pertimbangkan kod berikut:

class Foo {
    private int $id;
    private ?string $val;
    private DateTimeInterface $createdAt;
    private ?DateTimeInterface $updatedAt;

    public function __construct(int $id) {
        $this->id = $id;
    }
}
Salin selepas log masuk

Mencuba mengakses $val sebelum menetapkannya akan mengakibatkan:

Fatal error: Typed property Foo::$val must not be accessed before initialization
Salin selepas log masuk

Untuk menyelesaikan masalah ini, tetapkan nilai yang sepadan dengan jenis yang diisytiharkan sama ada sebagai nilai lalai atau semasa pembinaan. Contohnya:

class Foo {
    private int $id;
    private ?string $val = null;
    private ?DateTimeInterface $updatedAt;

    public function __construct(int $id) {
        $this->id = $id;
        $this->createdAt = new DateTimeImmutable();
        $this->updatedAt = new DateTimeImmutable();
    }
}
Salin selepas log masuk

Ini memastikan semua sifat mempunyai nilai yang sah, menghapuskan ralat.

Apabila berurusan dengan nilai yang dijana secara automatik seperti ID, mengisytiharkan harta itu sebagai peribadi ?int $id = null adalah disyorkan. Untuk sifat lain yang tiada tugasan khusus, pilih nilai lalai yang sesuai berdasarkan jenisnya.

Atas ialah kandungan terperinci Mengapa PHP Throw \'Harta Yang Ditaip Mesti Tidak Dicapai Sebelum Dimulakan\'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan