PHP中,魔术方法有不少种,本文章给你们记录分享:__get\__set的用法跟理解php
首先,咱们得明白oop中的三个访问修饰符:public、protected、privateoop
分别的意思:this
一、公共的,任何地方均可以访问,包括本类,子类,外部code
二、受保护的成员属性或者方法,只能在本类或者子类中访问get
三、私有的,只能在本类中访问io
那么__get,__set就跟这修饰符存在跟很大的关系function
__get:当访问一个不是公开成员属性时被调用,一个不存在的属性被调用也会执行
__set:当给一个不是公开成员属性赋值时被调用,给一个不存在的属性赋值也会执行
看案例代码:class
class Car
{
protected $price = 300000;
}
/*
*魔术方法 __get
*@param pre_name 属性名称
*/
function __get($pre_name)
{
if(isset($this->$pre_name))
{
return $this->$pre_name;
} else
{
echo '此属性不存在';
}
}
/*
*当访问一个受保护的属性时 __get被调用
*此时经过魔术方法让外部也能够访问到
*/
$lexus = new Car();
echo $lexus->price; //输出300000
/*
*当访问一个不存在的属性时 __get也会被调用
*/
echo $lexus->types; //输出:此属性不存在
?>
这是一个车类,价格不是公开的,当某我的硬是要知道这辆雷克萨斯的价格时,能够用__get方法。方法
下面是__set分享
class Car
{
protected $price = 300000;
}
/*
*魔术方法 __set
*@param pre_name 属性名称 val 属性值
*/
function __set($pre_name,$val)
{
if(isset($this->$pre_name))
{
$this->$pre_name = $val;
} else
{
echo '此属性不存在';
}
}
/*
*当设置一个不公开的属性值时 __set被调用
*/
$lexus = new Car();
$lexus->price = 3000000;
/*
*当设置一个不存在的属性时 __set也会被调用
*/
$lexus->types = 'XFS'; //输出:此属性不存在
?>