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!
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.
Dalam pengaturcaraan berorientasikan objek PHP, terdapat satu siri kaedah ajaib dalam PHP Lihat kaedah ajaib yang telah anda pelajari sebelum ini __clone
__construct
__destruct
Kita 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 '为“'.$key.'”赋值“'.$value.'”失败!<br>'; } } $object = new father(); $object -> study1 = '好好学习'; $object -> study2 = '天天向上'; $object -> study3 = '福如东海'; ?>
Hasil output:
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="max-width:90%">__get()</span></strong>
__get()
Kaedah
__get()
public function __get($name){ ... ... ; }
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 = '好好学习'; private $study1 = '天天向上'; public function __get($study1){ echo '获取:“'.$study1.'”失败!'; } } $object = new father(); echo $object -> study.'<br>'; echo $object -> study1.'<br>'; echo $object -> study2.'<br>'; ?>
di mana parameter. $name mewakili nama pembolehubah operasi yang dikehendaki Mari kita lihat penggunaan kaedah __get() melalui contoh adalah seperti berikut:
Hasil keluaran: .
<strong><span style="max-width:90%">__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()
empty()
Kaedah
public function __isset($name){ ... ... ; }
Panggilan automatik_ The syarat khusus bagi kaedah _isset() ialah apabila fungsi
ataudigunakan 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()
empty()
<?php class father{ public $study = '好好学习'; private $name = '天天向上'; public function __isset($name){ if(property_exists('Website', $name)){ echo '成员属性:“'.$name.'”存在!<br>'; }else{ echo '成员属性:“'.$name.'”不存在!<br>'; } } } $object = new father(); isset($object -> mother); isset($object -> name); ?>
Output. hasil: property_exists()
property_exists($class_name,$property_name)
Apa yang perlu kita ambil perhatian ialah fungsi <strong><span style="max-width:90%">__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()
public function __unset($name){ ... ... ; }
其中我们需要注意的是:
参数 $name 为要访问的属性名称。
unset() 函数的作用是删除指定的变量,需要传入一个或多个变量作为参数,另外,该函数没有返回值。
可以使用 unset() 函数在类外部去删除类中的成员属性。如果要删除类中的公有属性的话直接使用 unset() 函数即可;
如果要删除类中的私有属性的话,则需要在类中添加一个 __unset() 方法。
接下来我们通过实例来看一下__unset()方法的使用,实例如下:
<?php class father{ public $name = 'http://c.biancheng.net/php/'; private $study = 'C语言中文网'; public function __unset($study){ if(property_exists('father', $study)){ unset($this->$study); echo '移除成员属性:“'.$study.'”成功!<br>'; }else{ echo '成员属性:“'.$study.'”不存在!<br>'; } } } $object = new father(); unset($object->name); unset($object->study); unset($object->study1); ?>
输出结果:
由上述实例看出当在类外部对类中不可访问或不存在的属性使用 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!