• 河南网站建设-郑州网站设计-郑州网站建设-手机建站-郑州建站-上海建站

  • 专注网站建设 服务热线: 13061801310

当前位置:东东网 > 近期动态 > 建站常见问题 > 正文

php教程:php类魔术方法

发布时间:2020-04-26 | 发布者: 东东工作室 | 浏览次数:

* 1.类魔术方法:__get(),__set()实现属性查询器和设置器

 

* 2.魔术方法之前介绍过了,需要特定场景触发,由对象自动调用

* 3.__get($name): 外部通过对象获取对象私有属性或不存在的属性时自动触发

* 4.__set($name,$value):外部设置私有属性或不存在属性值的时候自动触发

* 5.魔术方法可以适用于所有存在或不存在的类属性,不需要再为每个属性创建对应的访问接口

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

class GirlFriend3 {

    //声明属性

    private $name;

    private $age;

    private $stature;

    private $data=[];

    

    //构造方法

    public function __construct($name='',$age=0,array $stature=[])

    {

        $this->name = $name;

        $this->age = $age;

        $this->stature = $stature;

    }

    

    //魔术方法:查询器

    public function __get($name)

    {

//        return $this->$name;

        //加入检测:访问不存在的属性时给出提示信息

//        return isset($this->$name)?$this->$name:'无此属性';

        

        //如果类中添加一个自定义的数据收集器$data,就从这里取值

        $msg = null;

        if (isset($this->$name)) {

            $msg $this->$name;

        elseif (isset($this->data[$name])) {

            $msg $this->data[$name];

        

        else {

            $msg '无此属性';

        }

        

        return $msg;

    }

    

    //魔术方法:设置器

    public function __set($name$value)

    {

        //不做检测直接设置

//        $this->$name = $value;

        

        //完善设置器,实现对不存在属性的创建

        //如果访问的是已存在的属性,则直接输出

        if (isset($this->$name)) {

            $this->$name $value//输出属性

        else {

            //如果属性不存在,则创建它并保存到类属性$data数组中

            $this->data[$name] = $value;

        }

    }

}

 

转载请标注:东东工作室——php教程:php类魔术方法