Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Penjelasan terperinci tentang kaedah __set dan __get dalam PHP dan senario aplikasinya

Penjelasan terperinci tentang kaedah __set dan __get dalam PHP dan senario aplikasinya

PHPz
PHPzasal
2023-03-31 09:10:481555semak imbas

Dalam PHP, terdapat dua kaedah sihir yang sangat berguna (__set dan __get), yang digunakan untuk mengawal operasi membaca dan menulis atribut ahli. Artikel ini akan menyelidiki penggunaan kedua-dua kaedah ajaib ini dan senario aplikasinya dalam PHP.

__kaedah tetapan

Apabila kami menetapkan nilai pada harta yang tidak wujud atau tidak boleh diakses, PHP akan memanggil kaedah __set secara automatik. Contohnya:

class Person {
    private $name;

    public function __set($key, $value) {
        if ($key == 'name') {
            $this->name = $value;
        }
    }
}

$person = new Person();
$person->name = 'Lucas';

Dalam contoh di atas, kami mencipta Orang kelas dan mentakrifkan $name harta peribadi dalam kelas. Kami juga mentakrifkan kaedah __set, yang akan menentukan nilai atribut yang hendak ditetapkan berdasarkan $key yang diluluskan. Jika $key bersamaan dengan 'nama', nilai yang diluluskan diberikan kepada atribut $name.

Kami mencipta objek $person dan menetapkan nilai atribut nama kepadanya. Memandangkan harta ini adalah peribadi, kami tidak boleh mengaksesnya secara langsung. Walau bagaimanapun, jika kita memberikan nilai kepadanya melalui $person->name, kaedah __set sebenarnya akan dipanggil secara automatik.

kaedah __get

Berbanding dengan kaedah __set, kaedah __get lebih biasa digunakan. Apabila kita cuba membaca nilai harta yang tidak wujud atau tidak boleh diakses, PHP secara automatik memanggil kaedah __get. Contohnya:

class Person {
    private $name;

    public function __get($key) {
        if ($key == 'name') {
            return $this->name;
        }
    }
}

$person = new Person();
echo $person->name;

Dalam contoh di atas, kami mentakrifkan kaedah __get, yang akan menentukan nilai atribut yang hendak diperoleh berdasarkan $key yang masuk. Jika $key sama dengan 'name', mengembalikan nilai atribut $name.

Kami mencipta objek $person dan cuba membaca nilai atribut namanya. Memandangkan harta ini adalah peribadi, kami tidak boleh mengaksesnya secara langsung. Walau bagaimanapun, jika kita memperoleh nilainya melalui $person->name, kaedah __get sebenarnya akan dipanggil secara automatik.

Senario Aplikasi

Kaedah __set dan __get boleh digunakan untuk mengawal operasi membaca dan menulis atribut ahli. Ini sangat berguna dalam kod, terutamanya dalam kod yang memerlukan kawalan akses dan pengesahan data sifat persendirian.

Berikut ialah kelas ringkas yang dipanggil Pengguna yang menggunakan kaedah __set dan __get untuk mengawal bacaan dan penulisan nama pengguna dan atribut umur:

class User {
    private $name;
    private $age;

    public function __set($key, $value) {
        switch ($key) {
            case 'name':
                $this->setName($value);
                break;
            case 'age':
                $this->setAge($value);
                break;
        }
    }

    public function __get($key) {
        switch ($key) {
            case 'name':
                return $this->name;
                break;
            case 'age':
                return $this->age;
                break;
        }
    }

    private function setName($name) {
        if (!is_string($name)) {
            throw new InvalidArgumentException('name must be a string');
        }

        $this->name = $name;
    }

    private function setAge($age) {
        if (!is_int($age)) {
            throw new InvalidArgumentException('age must be an integer');
        }

        $this->age = $age;
    }
}

$user = new User();
$user->name = 'Lucas';
$user->age = 26;

echo $user->name;
echo $user->age;

Dalam contoh di atas, kami mencipta kelas Pengguna dan melaksanakan kaedah __set dan __get di dalamnya. Kami juga mentakrifkan kaedah peribadi setName dan setAge untuk menyemak kesahihan nama dan atribut umur yang dimasukkan oleh pengguna.

Apabila kami menetapkan nilai pada atribut nama dan umur, kaedah __set akan dipanggil secara automatik. Dalam kaedah __set, kami mewakilkan operasi tugasan kepada kaedah setName atau setAge berdasarkan nilai $key.

Apabila kita cuba membaca nama dan atribut umur, kaedah __get dipanggil secara automatik. Dalam kaedah __get, kami memperoleh nilai atribut yang sepadan berdasarkan nilai $key.

Ringkasan

Kaedah __set dan __get ialah dua kaedah ajaib yang sangat berguna dalam bahasa PHP. Ia boleh digunakan untuk mengawal pembacaan dan penulisan sifat ahli, terutamanya dalam kod yang memerlukan kawalan akses dan pengesahan data bagi harta persendirian. Kami telah menguasai senario penggunaan dan aplikasi asas bagi kedua-dua kaedah ini melalui beberapa kod sampel, dengan harapan dapat membantu pembaca.

Atas ialah kandungan terperinci Penjelasan terperinci tentang kaedah __set dan __get dalam PHP dan senario aplikasinya. 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