Rumah >pembangunan bahagian belakang >tutorial php >Bagaimanakah Anda Boleh Mengendalikan Berbilang Senario Permulaan dalam Kelas PHP Tanpa Berbilang Pembina?

Bagaimanakah Anda Boleh Mengendalikan Berbilang Senario Permulaan dalam Kelas PHP Tanpa Berbilang Pembina?

Patricia Arquette
Patricia Arquetteasal
2024-11-23 01:58:17829semak imbas

How Can You Handle Multiple Initialization Scenarios in PHP Classes Without Multiple Constructors?

Berbilang Pembina dalam PHP

PHP tidak membenarkan berbilang pembina dengan tandatangan argumen berbeza dalam kelas. Ini menimbulkan cabaran apabila senario berbeza memerlukan proses pemulaan yang berbeza.

Satu pendekatan adalah untuk mentakrifkan dua kaedah pembina:

class Student {
    public function __construct($id) {
        $this->id = $id;
    }

    public function __construct(array $row_from_database) {
        $this->id = $row_from_database['id'];
        $this->name = $row_from_database['name'];
    }
}

Walau bagaimanapun, pendekatan ini melanggar peraturan sintaks pembina PHP.

Untuk memintas had ini, penyelesaian biasa adalah dengan mencipta kaedah kilang statik sebaliknya:

class Student {
    public function __construct() {
        // Allocate resources here
    }

    public static function withID($id) {
        $student = new self();
        $student->id = $id;
        return $student;
    }

    public static function withRow(array $row) {
        $student = new self();
        $student->id = $row['id'];
        $student->name = $row['name'];
        return $student;
    }
}

Dengan teknik ini, pemulaan dilakukan melalui kaedah statik dan bukannya pembina:

$studentWithID = Student::withID(42);
$studentWithRow = Student::withRow(['id' => 42, 'name' => 'John']);

Kaedah kilang statik menyediakan cara yang fleksibel dan boleh diselenggara untuk menangani pelbagai senario permulaan sementara mematuhi prinsip reka bentuk kelas PHP.

Atas ialah kandungan terperinci Bagaimanakah Anda Boleh Mengendalikan Berbilang Senario Permulaan dalam Kelas PHP Tanpa Berbilang Pembina?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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