属性重载:当访问一个不存在或者权限不够的属性的时候,能够触发一系列的魔术方法,就叫做属性重载
__set():当用户在设置不存在或者权限不够的属性的时候会自动触发
没有设置__set( name, n a m e , value)的时候,可以给$person对象增加任意多个属性,真是赤鸡!但是会导致被恶意攻击
<?php
//属性重载
class Person{
}
//实例化
$person = new Person();
//给对象增加属性,不管它有没有设定这个属性,都可以随便设。
$person->name = '爷爷';
$person->age = 80;
添加魔术方法:__set( name, n a m e , value)
<?php
//属性重载
class Person{
//魔术方法__set
//两个参数:属性名,属性值
public function __set($name,$value){
//增加一个允许列表,也就是说,只能在这些属性值里面,规定了属性值的范围
$allow = array('name','age','tail');
//判断用户的操作是否合法
if(in_array($name,$allow)){
//增加属性
$this->$name = $value;
}
}
}
//实例化
$person = new Person();
var_dump($person);
//给对象增加属性
$person->name = '爷爷';
$person->age = 80;
//增加一个不允许的属性
$person->drag = '大麻';
var_dump($person);