懈惨绣不焙惠恋降疆谩限刻吾
1.类魔术方法:__get(),__set()实现属性查询器和设置器
2.魔术方法之前介绍过了,需要特定场景触发,由对象自动调用
3.__get($name): 外部通过对象获取对象私有属性或不存在的属性时自动触发
4.__set($name,$value):外部设置私有属性或不存在属性值的时候自动触发
5.魔术方法可以适用于所有存在或不存在的类属性,不需要再为每个属性创建对应的访问接口
新建GirlFriend3.php 和demo3.php
GirlFriend3.php:
<?php class GirlFriend3 { //php是弱类型的语言,可以给$name指定为空字符串提示php类型为字符型 //private:访问控制符:私有的,只允许在当前类中被访问,外部不能访问 private $name=""; private $age=0; private $stature=[]; //声明一个构造方法:在实例化的时候自动调用 //构造方法:对对象的属性进行初始化(还有其他的用法) //array:数组参数可以在前面加array,不加也可以 public function __construct($name,$age,array $stature) { $this->name=$name; $this->age=$age; $this->stature=$stature; } }
demo3.php
<?php require "./class/GirlFriend3.php"; $girfriend3=new GirlFriend3('冰冰姐',28,[90,95,98]); echo $girfriend3->name;
执行,此时访问私有属性被拒绝
在类中添加魔术方法__get()
<?php class GirlFriend3 { //php是弱类型的语言,可以给$name指定为空字符串提示php类型为字符型 //private:访问控制符:私有的,只允许在当前类中被访问,外部不能访问 private $name=""; private $age=0; private $stature=[]; //声明一个构造方法:在实例化的时候自动调用 //构造方法:对对象的属性进行初始化(还有其他的用法) //array:数组参数可以在前面加array,不加也可以 public function __construct($name,$age,array $stature) { $this->name=$name; $this->age=$age; $this->stature=$stature; } // 查询器:__get() // 双下划线开始的叫魔术方法,由系统直接调用 // 当读取一个没有权限访问的属性时,会自动触发这个魔术方法 public function __get($name) { return $this->$name; } }
执行:
还可以设置访问条件,如$name不为空,且不为西门庆
设置器
修改类文件
<?php class GirlFriend3 { //php是弱类型的语言,可以给$name指定为空字符串提示php类型为字符型 //private:访问控制符:私有的,只允许在当前类中被访问,外部不能访问 private $name=""; private $age=0; private $stature=[]; //声明一个构造方法:在实例化的时候自动调用 //构造方法:对对象的属性进行初始化(还有其他的用法) //array:数组参数可以在前面加array,不加也可以 public function __construct($name,$age,array $stature) { $this->name=$name; $this->age=$age; $this->stature=$stature; } // 查询器:__get($name) // 双下划线开始的叫魔术方法,由系统直接调用 // 当读取一个没有权限访问的属性时,会自动触发这个魔术方法 public function __get($name) { return $this->$name; } // 设置器__set($name,$value) public function __set($name,$value) { //如果是对age属性进行修改 if($name=='age') { if(in_array($value,range(14,120))) { $this->$name=$value; } } else { $this->$name=$value; } } }
demo3.php
<?php require "./class/GirlFriend3.php"; $girfriend3=new GirlFriend3('冰冰姐',28,[90,95,98]); $girfriend3->age=35;//设置年龄为35 echo $girfriend3->age;
执行:
非法数据:
修改demo3.php:
<?php require "./class/GirlFriend3.php"; $girfriend3=new GirlFriend3('冰冰姐',28,[90,95,98]); $girfriend3->age=5;//设置年龄为5 echo $girfriend3->age;
执行:
卢踌坤驮翠导桐辰籍拆谁纤察