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.
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.
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
Dalam contoh ini, mengakses harta $val tanpa memberikannya rentetan atau nilai nol terlebih dahulu membuang an ralat.
Nilai Lalai:
Anda boleh menetapkan nilai lalai kepada sifat semasa pengisytiharan:
class Foo { private ?string $val = null; // Default null value for optional property }
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(); } }
Jenis Nullable:
Untuk sifat pilihan, isytiharkan sebagai nullable:
private ?int $id;
DB Generated Nilai (ID Dijana Auto):
Gunakan jenis nullable untuk sifat yang dimulakan oleh pangkalan data:
private ?int $id = null;
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!