Rumah > pembangunan bahagian belakang > tutorial php > Mengapa Saya Mendapat Ralat \'Harta Ditaip Tidak Mesti Dicapai Sebelum Permulaan\' dalam PHP?

Mengapa Saya Mendapat Ralat \'Harta Ditaip Tidak Mesti Dicapai Sebelum Permulaan\' dalam PHP?

Barbara Streisand
Lepaskan: 2024-11-17 04:32:03
asal
969 orang telah melayarinya

Why Am I Getting the

Ralat "Harta Ditaip Sebelum Dimulakan" Selepas Menambah Petua Jenis Harta

Apabila memperkenalkan pembayang jenis harta dalam kelas PHP anda, anda mungkin menghadapi ralat menyatakan , "Harta yang ditaip tidak boleh diakses sebelum permulaan." Ralat ini berlaku apabila mengakses harta sebelum ia dimulakan dengan nilai yang sah sepadan dengan jenis yang diisytiharkan.

Punca

Menurut pembayang jenis PHP 7.4 untuk sifat, semua sifat mesti mempunyai nilai yang sepadan dengan jenis yang diisytiharkan. Sifat yang tidak ditetapkan berada dalam keadaan tidak ditentukan dan tidak akan sepadan dengan mana-mana jenis yang diisytiharkan, malah batal.

Contoh

Pertimbangkan kod berikut:

class Foo {

    private int $id;
    private ?string $val;
    private DateTimeInterface $createdAt;
    private ?DateTimeInterface $updatedAt;

    // Getters and setters omitted for brevity...
}

$f = new Foo(1);
$f->getVal(); // Error: Typed property Foo::$val must not be accessed before initialization
Salin selepas log masuk

Dalam contoh ini, mengakses harta $val tanpa memberikannya rentetan atau nilai nol terlebih dahulu membuang an ralat.

Penyelesaian

Nilai Lalai:

Anda boleh menetapkan nilai lalai kepada sifat semasa pengisytiharan:

class Foo {

    private ?string $val = null; // Default null value for optional property
}
Salin selepas log masuk

Permulaan Pembina:

Memulakan sifat dalam pembina:

class Foo {

    public function __construct(int $id) {
        // Assign values to all properties
        $this->id = $id;
        $this->createdAt = new DateTimeImmutable();
        $this->updatedAt = new DateTimeImmutable();
    }
}
Salin selepas log masuk

Jenis Nullable:

Untuk sifat pilihan, isytiharkan sebagai nullable:

private ?int $id;
Salin selepas log masuk

DB Generated Nilai (ID Dijana Auto):

Gunakan jenis nullable untuk sifat yang dimulakan oleh pangkalan data:

private ?int $id = null;
Salin selepas log masuk

Atas ialah kandungan terperinci Mengapa Saya Mendapat Ralat \'Harta Ditaip Tidak Mesti Dicapai Sebelum Permulaan\' dalam PHP?. 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