魔术方法__get()和set函数

基本介绍

 

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. 如果该对象没有有这个属性, 则继续判断该对象对应的类是否定义过这个属性,如果定义过仍然返回真,否则才返回假
 
魔术方法 __call()
基本介绍;当我们调用一个不可访问的成员方法时,就会自动调用__call()魔术方法    成员方法不存在或者protected 或者 private
__call(成员方法函数名,参数形式是数组); 两个参数
 

转载于:https://www.cnblogs.com/zuichumx0826/p/9152962.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值