基本介绍
1.当去使用可访问的属性时,系统就会调用__get方法 不可访问属性:该属性不存在 直接访问protected或private属性
2.当去给不可访问属性赋值时,会调用__set方法
<?php header('content-type:text/html;charset=utf-8'); class human{ public $name; protected $food; function __construct($name,$food){ $this->name=$name; $this->food=$food; } //魔术方法 //魔术方法名字是固定的系统提供 //$pro_name public function __get($pro_name){ if(property_exists($this,$pro_name)){ return $this->$pro_name; } else{ return "没有该属性"; } } } $wd= new human('温蛋','鸡'); echo "<br> 名字是".$wd->name; echo "<br> 食物是".$wd->food;
<?php header('content-type:text/html;charset=utf-8'); class human{ public $name; protected $food; function __construct($name,$food){ $this->name=$name; $this->food=$food; } //魔术方法 //魔术方法名字是固定的系统提供 //$pro_name 是形式参数,表示属性名 public function __get($pro_name){ if(property_exists($this,$pro_name)){ return $this->$pro_name; } else{ return "没有该属性"; } } //魔术方法 //魔术方法名字是固定的系统提供 //$pro_name 是形式参数,表示属性名 $pro_val是属性值 public function __set($pro_name,$pro_val){ // echo $pro_name.$pro_val; if(property_exists($this,$pro_name)){ $this->$pro_name=$pro_val; } else{ return "没有该属性"; } } } $wd= new human('温蛋','鸡'); echo "<br> 名字是".$wd->name; echo "<br> 食物是".$wd->food; //修改对象名字和食物 $wd->name="猪"; //在默认情况下,不能直接给一个protected属性赋值,会触发set魔术方法; $wd->food="猪饲料"; echo "<br />新的值是"; echo "<br> 名字是".$wd->name; echo "<br> 食物是".$wd->food;
访问访问不到的成员属性,会自动调用__get方法 形参就是成员属性名
给访问不到的成员属性赋值时,会自动调用__set方法 形参是成员属性名,属性值
检测私有属性是否被设定 会自动调用__isset()函数
__unset() 方法用于删除私有属性。
对象里面成员是公有的,可以直接使用 isset() 函数。如果是私有的成员属性,那就需要在类里面加上一个 __isset() 方法:
unset() 函数只能删除对象的公有成员属性,当要删除对象内部的私有成员属性时,需要使用__unset() 方法:
直接输出对象名时,就会触发魔术方法__toString
property_exists判断是否存在
//property_exists(对象名, 属性)
//1. 先判断该对象是否有这个属性,如果有则返回真.
//2. 如果该对象没有有这个属性, 则继续判断该对象对应的类是否定义过这个属性,如果定义过仍然返回真,否则才返回假
给访问不到的成员属性赋值时,会自动调用__set方法 形参是成员属性名,属性值
检测私有属性是否被设定 会自动调用__isset()函数
__unset() 方法用于删除私有属性。
对象里面成员是公有的,可以直接使用 isset() 函数。如果是私有的成员属性,那就需要在类里面加上一个 __isset() 方法:
unset() 函数只能删除对象的公有成员属性,当要删除对象内部的私有成员属性时,需要使用__unset() 方法:
直接输出对象名时,就会触发魔术方法__toString
property_exists判断是否存在
//property_exists(对象名, 属性)
//1. 先判断该对象是否有这个属性,如果有则返回真.
//2. 如果该对象没有有这个属性, 则继续判断该对象对应的类是否定义过这个属性,如果定义过仍然返回真,否则才返回假
魔术方法 __call()
基本介绍;当我们调用一个不可访问的成员方法时,就会自动调用__call()魔术方法 成员方法不存在或者protected 或者 private
__call(成员方法函数名,参数形式是数组); 两个参数