Rumah > pembangunan bahagian belakang > masalah PHP > Adakah terdapat pembina dalam php?

Adakah terdapat pembina dalam php?

藏色散人
Lepaskan: 2023-03-15 06:22:01
asal
1831 orang telah melayarinya

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.

Adakah terdapat pembina dalam php?

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
Salin selepas log masuk

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();
?>
Salin selepas log masuk

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);
?>
Salin selepas log masuk

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) {
    }
}
Salin selepas log masuk

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 statik

Dalam 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[&#39;id&#39;], $data[&#39;name&#39;]);
    }
    public static function fromXml(string $xml): static {
        // 自定义代码逻辑。
        $data = convert_xml_to_array($xml);
        $new = new static();
        $new->id = $data[&#39;id&#39;];
        $new->name = $data[&#39;name&#39;];
        return $new;
    }
}
$p1 = Product::fromBasicData(5, &#39;Widget&#39;);
$p2 = Product::fromJson($some_json_string);
$p3 = Product::fromXml($some_xml_string);
Salin selepas log masuk

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.

  • Pembelajaran yang disyorkan: "
Tutorial Video PHP

"

Atas ialah kandungan terperinci Adakah terdapat pembina dalam php?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan