版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36431166/article/details/84492869
PHP中,魔术方法有很多种,本文章给大家记录分享:__get\__set的用法跟理解
首先,我们得明白oop中的三个访问修饰符:public、protected、private
分别的意思:
1、公共的,任何地方都可以访问,包括本类,子类,外部
2、受保护的成员属性或者方法,只能在本类或者子类中访问
3、私有的,只能在本类中访问
那么__get,__set就跟这修饰符存在跟很大的关系
- __get:当访问一个不是公开成员属性时被调用,一个不存在的属性被调用也会执行
- __set:当给一个不是公开成员属性赋值时被调用,给一个不存在的属性赋值也会执行
看案例代码:
<?php
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
<?php
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'; //输出:此属性不存在
?>