Rumah  >  Artikel  >  pembangunan bahagian belakang  >  PHP中什么是魔术方法?常用魔术方法有哪些?

PHP中什么是魔术方法?常用魔术方法有哪些?

慕斯
慕斯asal
2021-06-17 17:44:152747semak imbas

上篇文章给大家介绍了《PHP中什么是继承和派生?我们如何运用继承?》,本文继续给大家介绍PHP中什么是魔术方法?常用魔术方法有哪些?有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。

PHP中什么是魔术方法?常用魔术方法有哪些?

1、什么是魔术方法

系统在特定的时机自动调用的方法

2、常用魔术方法:

_get

触发时机:对象在外部访问私有成员或者受保护属性时调用

该方法有一个参数:参数就是属性名

我们以代码为例:

首先我们先建立一个新的文件,我们写一个class类,在类里面定义属性,然后我们创建一个对象,当我们去输出(echo)刚刚定义的类,我们会发现出现报错,因为对象只能访问公共的属性,我们不能访问受保护的和私有的属性,代码如下:

<?php
class Person 
{
    public $name = &#39;林徽因&#39;;
    protected $pome = &#39;答案很长,我准备用一生的时间来回答,你准备要听了吗?&#39;;
    private $time = &#39;民国&#39; ;
}
$niu = new Person();
echo $niu->pome;
?>

代码显示结果:

6.JPG

我们会发现我们上述代码运行出现错误,因此,在外部不能访问受保护的和私有的属性,如果我们想要在外部试图通过对象来访问受保护的或者私有的成员属性时,就会自动的触发get方法。

    public function __get($name){
        echo $name;
    }

紧接着打印出$name,

代码显示结果:

7.JPG

因此我们通过上述代码可以使用if语句进行判断:

 if ($name == &#39;pome&#39;){
            return $this->pome;

代码显示结果:

8.JPG

以上就是我们所说的get用法

--set

触发时机:对象在外部设置私有或者受保护成员属性值的时候调用

该方法有两个参数:

参数1:成员属性名!

参数2:要设置的值

我们以代码为例:

所有的魔术方法都是用public,和上述一样我们在类里面定义属性,然后我们创建一个对象,而set属性有两个参数,一个是属性名,一个是属性值,在类里面我们都打印出来;

public function __set($name,$value)
    {
        var_dump($name,$value);
    }
}
$niu = new Person();
//echo $niu->pome;
$niu->pome = &#39;答案很长,我准备用一生的时间来回答,你准备要听了吗?&#39;;

代码显示结果:

8.JPG

补充:(下次具体讲解)

在外部可以通过unset销毁对象中的public属性

_unset

触发时机:对象在外部销毁私有或者受保护成员属性的时候调用

该方法有一一个参数:参数就是私有的成员属性名

_isset

触发时机:对象在外部判断私有或者受保护成员属性的时候调用,

该方法有一个参数:参数就是私有的成员属性名

construct :构造方法

触发时机:在创建对象的时候自动调用

destruct:析构方法

toString (了解)

触发时机:echo-一个对象的时候触发

该函数需要return-一个字符串

__debugInfo (了解)

触发时机:var_dump--个对象的时候触发

该函数需要return-一个数组

推荐学习:php视频教程

Atas ialah kandungan terperinci PHP中什么是魔术方法?常用魔术方法有哪些?. 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