Rumah >pembangunan bahagian belakang >tutorial php >Membawa anda memahami kaedah ajaib dalam PHP dalam masa lima minit (contoh terperinci)

Membawa anda memahami kaedah ajaib dalam PHP dalam masa lima minit (contoh terperinci)

WBOY
WBOYasal
2021-10-25 17:53:204075semak imbas

Dalam artikel sebelumnya, saya membawakan anda "Penggunaan kata kunci klon dan kaedah __clone() dalam PHP (contoh terperinci) ", yang memberi anda pengenalan terperinci untuk mengklon dalam Kata Kunci PHP dan __clone() kaedah, artikel ini terus membawakan anda kaedah ajaib dalam PHP, saya harap ia akan membantu anda!

Membawa anda memahami kaedah ajaib dalam PHP dalam masa lima minit (contoh terperinci)

Dalam artikel kami sebelum ini, apabila kami memperkenalkan kaedah __clone(), kami menyebut bahawa ini adalah sejenis kaedah ajaib "Bawa anda untuk membezakan kategori Pembina dan pemusnah yang disebut dalam juga dipanggil pembina dan pemusnah, dan ia juga merupakan sejenis kaedah sihir. Jadi apakah kaedah sihir? Apakah kaedah yang biasa digunakan? Bagaimana ia digunakan? Mari kita lihat seterusnya.

Kaedah sihir PHP

Dalam pengaturcaraan berorientasikan objek PHP, terdapat satu siri kaedah ajaib dalam PHP Lihat kaedah ajaib yang telah anda pelajari sebelum ini __clone__construct __destructKita boleh menemui satu persamaan, iaitu, semuanya bermula dengan dua garis bawah __, dan dipanggil secara automatik dalam keadaan tertentu.

Kemudian mari kita lihat beberapa kaedah sihir yang biasa digunakan dan cara menggunakannya dengan contoh.

<strong><span style="font-size: 18px;">__set()</span></strong>Kaedah

__set() kaedah digunakan untuk atribut kelas yang tidak ditentukan atau tidak kelihatan dalam persekitaran semasa Apabila memberikan nilai , perlu diingatkan bahawa semua kaedah ajaib dipanggil secara automatik di bawah syarat tertentu tertentu Apabila menetapkan nilai kepada atribut kelas yang tidak ditentukan atau tidak kelihatan dalam persekitaran semasa, ini adalah syarat khusus untuk panggilan kaedah __set().

Format sintaks adalah seperti berikut:

public function __set(要操作的变量, 要操作变量的值){
    ... ... ;
}

Contoh adalah seperti berikut:

<?php
    class father{
        public $study1;
        private $study2;
        public function __set($key, $value){
            echo &#39;为“&#39;.$key.&#39;”赋值“&#39;.$value.&#39;”失败!<br>&#39;;
        }
    }
    $object          = new father();
    $object -> study1  = &#39;好好学习&#39;;
    $object -> study2   = &#39;天天向上&#39;;
    $object -> study3 = &#39;福如东海&#39;;
?>

Hasil output:

Membawa anda memahami kaedah ajaib dalam PHP dalam masa lima minit (contoh terperinci)

Seperti yang dapat dilihat daripada contoh di atas, apabila atribut kelas yang tidak ditentukan atau tidak kelihatan diberikan nilai dalam persekitaran semasa, kaedah __set() akan dipanggil.

<strong><span style="font-size: 18px;">__get()</span></strong>__get()
Kaedah

__get()

public function __get($name){
    ... ... ;
}
Syarat khusus untuk memanggil kaedah

secara automatik ialah apabila memanggil atau mendapatkan atribut kelas yang tidak ditentukan atau tidak kelihatan dalam persekitaran semasa Format sintaks untuk mentakrifkan kaedah ini adalah seperti berikut:

<?php
    class father{
        public $study = &#39;好好学习&#39;;
        private $study1 = &#39;天天向上&#39;;
        public function __get($study1){
            echo &#39;获取:“&#39;.$study1.&#39;”失败!&#39;;
        }
    }
    $object = new father();
    echo $object -> study.&#39;<br>&#39;;
    echo $object -> study1.&#39;<br>&#39;;
    echo $object -> study2.&#39;<br>&#39;;
?>

di mana parameter. $name mewakili nama pembolehubah operasi yang dikehendaki Mari kita lihat penggunaan kaedah __get() melalui contoh adalah seperti berikut:

Hasil keluaran: Membawa anda memahami kaedah ajaib dalam PHP dalam masa lima minit (contoh terperinci).

<strong><span style="font-size: 18px;">__isset()</span></strong>Ia boleh dilihat daripada keputusan di atas bahawa apabila memanggil atau mendapatkan atribut kelas yang tidak ditentukan atau tidak kelihatan dalam persekitaran semasa, kaedah __get() akan dipanggil secara automatik. __isset()

isset()empty() Kaedah

public function __isset($name){
    ... ... ;
}

Panggilan automatik_ The syarat khusus bagi kaedah _isset() ialah apabila fungsi

atau

digunakan di luar kelas untuk sifat yang tidak boleh diakses atau tidak wujud dalam kelas, format sintaks kaedah tersebut adalah seperti berikut:

  • Apa yang perlu kita perhatikan ialah: isset()

    Parameter $name ialah nama atribut yang hendak diakses.
  • empty()

    Fungsi ini digunakan untuk menyemak sama ada pembolehubah wujud dan juga menentukan sama ada ia bukan NULL Jika pembolehubah itu wujud, ia akan kembali benar, jika tidak wujud, ia akan kembali palsu. Fungsi
  • digunakan untuk menyemak sama ada pembolehubah kosong Jika nilai pembolehubah itu bersamaan dengan FALSE, maka pembolehubah itu akan dianggap tidak wujud.


Jika anda ingin menggunakan fungsi isset() atau empty() untuk mengesan sifat persendirian dalam kelas, kami hanya perlu menambah kaedah __isset() pada kelas , apabila fungsi isset() atau empty() digunakan di luar kelas, kaedah __isset() di dalam kelas akan dipanggil secara automatik.
<?php
    class father{
        public $study = &#39;好好学习&#39;;
        private $name = &#39;天天向上&#39;;
        public function __isset($name){
            if(property_exists(&#39;Website&#39;, $name)){
                echo &#39;成员属性:“&#39;.$name.&#39;”存在!<br>&#39;;
            }else{
                echo &#39;成员属性:“&#39;.$name.&#39;”不存在!<br>&#39;;
            }
        }
    }
    $object = new father();
    isset($object -> mother);
    isset($object -> name);
?>


Seterusnya, mari kita lihat penggunaan kaedah __isset() melalui contoh adalah seperti berikut:

Membawa anda memahami kaedah ajaib dalam PHP dalam masa lima minit (contoh terperinci)

Output. hasil: property_exists()

 property_exists($class_name,$property_name)

Apa yang perlu kita ambil perhatian ialah fungsi <strong><span style="font-size: 18px;">__unset() </span></strong> boleh digunakan untuk mengesan sama ada atribut ditakrifkan dalam kelas Format sintaks di mana $class_name ialah nama kelas dalam bentuk rentetan, iaitu, ia ditentukan sama ada atribut property_name ditakrifkan dalam class class_name.

__unset()__unset()

KaedahPanggilan automatik ialah apabila fungsi unset() digunakan di luar kelas pada sifat yang tidak boleh diakses atau tidak wujud dalam kelas, format sintaks kaedah tersebut adalah seperti berikut:
public function __unset($name){
    ... ... ;
}

其中我们需要注意的是:

  • 参数 $name 为要访问的属性名称。

  • unset() 函数的作用是删除指定的变量,需要传入一个或多个变量作为参数,另外,该函数没有返回值。

  • 可以使用 unset() 函数在类外部去删除类中的成员属性。如果要删除类中的公有属性的话直接使用 unset() 函数即可;

  • 如果要删除类中的私有属性的话,则需要在类中添加一个 __unset() 方法。

接下来我们通过实例来看一下__unset()方法的使用,实例如下:

<?php
    class father{
        public $name = &#39;http://c.biancheng.net/php/&#39;;
        private $study = &#39;C语言中文网&#39;;
        public function __unset($study){
            if(property_exists(&#39;father&#39;, $study)){
                unset($this->$study);
                echo &#39;移除成员属性:“&#39;.$study.&#39;”成功!<br>&#39;;
            }else{
                echo &#39;成员属性:“&#39;.$study.&#39;”不存在!<br>&#39;;
            }
        }
    }
    $object = new father();
    unset($object->name);
    unset($object->study);
    unset($object->study1);
?>

输出结果:

Membawa anda memahami kaedah ajaib dalam PHP dalam masa lima minit (contoh terperinci)

由上述实例看出当在类外部对类中不可访问或不存在的属性使用 unset() 函数时,__unset() 方法会被自动调用。

上述实例中给大家介绍了一些常用的魔术方法,但这并不是魔术方法的全部,那接下来再给大家列举一些魔术方法:

  • __call()  --- 调用一个不存在的方法时自动调用   

  • __sleep()  ---  使用 serialize 序列化时自动调用    

  • __toString() ---   把对象转换成字符串时自动调用   

  • __invoke()  ---  当尝试把对象当方法调用时自动调用

  • __wakeup()  ---  使用 unserialize 反序列化时自动调用    

  • __callStatic()  ---  调用一个不存在的静态方法时自动调用    

  • __debugInfo()  ---  使用 var_dump() 打印对象信息时自动调用 

  • __set_state()  ---  当使用 var_export() 函数时自动调用,接受一个数组参数    

大家如果感兴趣的话,可以点击《PHP视频教程》进行更多关于PHP知识的学习。

Atas ialah kandungan terperinci Membawa anda memahami kaedah ajaib dalam PHP dalam masa lima minit (contoh terperinci). 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