Terdapat pembina dalam PHP, dan penerangan sintaksnya ialah "__construct(mixed...$values = ""): void objek baru dicipta , jadi ia sangat sesuai untuk melakukan beberapa kerja permulaan sebelum menggunakan objek.
Persekitaran pengendalian artikel ini: sistem Windows 7, PHP versi 7.1, komputer DELL G3
Adakah terdapat pembina dalam php?
pembina php
__construct(mixed ...$values = ""): void
PHP membenarkan pembangun mentakrifkan kaedah sebagai pembina dalam kelas. Kelas dengan pembina akan memanggil kaedah ini setiap kali objek baharu dicipta, jadi ia sangat sesuai untuk melakukan beberapa kerja permulaan sebelum menggunakan objek.
Nota: Jika pembina ditakrifkan dalam subkelas, pembina kelas induknya tidak akan dipanggil secara tersirat. Untuk melaksanakan pembina kelas induk, anda perlu memanggil ibu bapa::__construct() dalam pembina kelas anak. Jika subkelas tidak mentakrifkan pembina, ia akan diwarisi daripada kelas induk seperti kaedah kelas biasa (jika ia tidak ditakrifkan sebagai peribadi).
Contoh #1 Pembina dalam warisan
<?php class BaseClass { function __construct() { print "In BaseClass constructor\n"; } } class SubClass extends BaseClass { function __construct() { parent::__construct(); print "In SubClass constructor\n"; } } class OtherSubClass extends BaseClass { // 继承 BaseClass 的构造函数 } // In BaseClass constructor $obj = new BaseClass(); // In BaseClass constructor // In SubClass constructor $obj = new SubClass(); // In BaseClass constructor $obj = new OtherSubClass(); ?>
Tidak seperti kaedah lain, __construct() tidak tertakluk kepada peraturan keserasian tandatangan semasa mewarisi.
Sejak PHP 5.3.3, dalam ruang nama, kaedah dengan nama yang sama dengan nama kelas tidak lagi digunakan sebagai pembina. Kelas yang tiada dalam ruang nama tidak terjejas. Pembina ialah kaedah biasa yang dipanggil secara automatik apabila objek yang sepadan dijadikan instantiated. Oleh itu, sebarang bilangan parameter boleh ditakrifkan, yang boleh diperlukan, mempunyai jenis, atau mempunyai nilai lalai. Parameter pembina diletakkan dalam kurungan selepas nama kelas.
Contoh #2 Menggunakan parameter pembina
<?php class Point { protected int $x; protected int $y; public function __construct(int $x, int $y = 0) { $this->x = $x; $this->y = $y; } } // 两个参数都传入 $p1 = new Point(4, 5); // 仅传入必填的参数。 $y 会默认取值 0。 $p2 = new Point(4); // 使用命名参数(PHP 8.0 起): $p3 = new Point(y: 5, x: 4); ?>
Jika kelas tidak mempunyai pembina dan parameter pembina tidak diperlukan, kurungan boleh ditinggalkan .
Pembina gaya lama
Sebelum PHP 8.0.0, jika kelas dalam ruang nama global mempunyai kaedah dengan nama yang sama, ia akan diselesaikan kepada yang lama peranti pembina gaya. Walaupun fungsi boleh digunakan sebagai pembina, sintaks ini ditamatkan dan mengakibatkan ralat E_DEPRECATED. Jika __construct() dan kaedah dengan nama yang sama wujud pada masa yang sama, __construct() akan dipanggil.
Kaedah dengan nama yang sama dengan kelas tidak lagi mempunyai makna istimewa dalam dua kes berikut: kelas dalam ruang nama dan mana-mana kelas sejak PHP 8.0.0.
Gunakan __construct() dalam kod baharu.
Promosi atribut pembina
Bermula dari PHP 8.0.0, parameter pembina juga boleh dinaikkan pangkat kepada atribut kelas dengan sewajarnya. Ia adalah perkara biasa bagi parameter pembina untuk diberikan kepada atribut kelas, jika tidak, ia tidak boleh dikendalikan. Fungsi promosi pembina memberikan kemudahan untuk senario ini. Jadi contoh di atas boleh ditulis semula dengan cara berikut:
Contoh #3 Menggunakan promosi harta pembina ), PHP akan menganggapnya sebagai harta objek dan parameter pembina pada masa yang sama, dan menetapkannya kepada harta itu. Pembina boleh kosong atau mengandungi pernyataan lain. Selepas nilai parameter diberikan kepada atribut yang sepadan, penyataan kod tambahan dalam teks dilaksanakan.
Tidak semua parameter perlu diperbaiki. Ada kemungkinan untuk mempunyai campuran parameter dinaikkan dan tidak dinaikkan sebagai atribut, dan parameter tersebut tidak perlu teratur. Parameter yang dibangkitkan tidak menjejaskan panggilan kod dalam pembina.<?php class Point { public function __construct(protected int $x, protected int $y = 0) { } }
Nota:
Jenis sifat objek tidak boleh dipanggil untuk mengelakkan kekeliruan untuk enjin. Oleh itu parameter yang digalakkan tidak boleh dipanggil sama ada. Sebarang pengisytiharan jenis lain dibenarkan.
Nota:
Atribut yang diletakkan dalam parameter promosi pembina akan disalin sebagai atribut dan parameter pada masa yang sama.
Kaedah penciptaan statikDalam PHP, setiap kelas hanya boleh mempunyai satu pembina. Walau bagaimanapun, terdapat situasi di mana objek perlu dibina dengan cara yang berbeza dengan input yang berbeza. Dalam kes ini adalah disyorkan untuk menggunakan binaan pembalut kaedah statik. Contoh #4 Gunakan kaedah penciptaan statik
Anda boleh menetapkan pembina kepada peribadi atau dilindungi untuk mengelakkan panggilan tambahan sendiri. Pada masa ini hanya kaedah statik boleh membuat instantiate kelas. Memandangkan mereka berada dalam kelas yang ditakrifkan yang sama, mereka boleh mengakses kaedah persendirian dan tidak perlu berada dalam contoh objek yang sama. Sudah tentu, pembina tidak perlu ditetapkan kepada peribadi Sama ada ia munasabah bergantung pada keadaan sebenar. Tiga kaedah statik menunjukkan cara objek boleh dijadikan instantiated dengan cara yang berbeza.<?php class Product { private ?int $id; private ?string $name; private function __construct(?int $id = null, ?string $name = null) { $this->id = $id; $this->name = $name; } public static function fromBasicData(int $id, string $name): static { $new = new static($id, $name); return $new; } public static function fromJson(string $json): static { $data = json_decode($json); return new static($data['id'], $data['name']); } public static function fromXml(string $xml): static { // 自定义代码逻辑。 $data = convert_xml_to_array($xml); $new = new static(); $new->id = $data['id']; $new->name = $data['name']; return $new; } } $p1 = Product::fromBasicData(5, 'Widget'); $p2 = Product::fromJson($some_json_string); $p3 = Product::fromXml($some_xml_string);
fromBasicData() Lulus semua parameter yang diperlukan ke dalam pembina, cipta objek dan kembalikan hasilnya.
fromJson() menerima rentetan JSON, memprosesnya terlebih dahulu ke dalam format yang diperlukan oleh pembina dan mengembalikan objek baharu.
fromXml() mengambil rentetan XML, menghuraikannya dan mencipta objek ringkas. Oleh kerana parameter adalah pilihan, pembina boleh dipanggil dengan semua parameter diabaikan. Kemudian tetapkan nilai kepada sifat objek dan kembalikan hasilnya.
Dalam tiga contoh di atas, kata kunci statik akan diterjemahkan ke dalam nama kelas kelas di mana kod itu terletak. Dalam kes ini ia adalah Produk.
"
Atas ialah kandungan terperinci Adakah terdapat pembina dalam php?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!