15-类的魔术方法

01魔术方法__get应用

<?php
class Student
{
	//私有的成员属性
	private $name = "张三";
	private $age  = 24;
	//当访问不可访问属性时,__get()魔术方法会自动调用
	public function __get($n)
	{
		return $this->$n;
	}
}
//创建学生类对象
$obj = new Student();
//访问私有的属性
echo "{$obj->name}的年龄是{$obj->age}岁!";
复制代码

02魔术方法__set应用

<?php
class Student
{
	//私有的成员属性
	private $name = "张三";
	private $age  = 24;
	//当给不可访问的属性赋值时,__set()魔术方法自动调用
	public function __set($n,$v)
	{
		$this->$n = $v;
	}
}
//创建学生类对象
$obj = new Student();
//修改私有属性
$obj->name = "刘明明";
$obj->age  = 29;

var_dump($obj);
复制代码

03魔术方法__isset应用

<?php
class Student
{
	//私有的成员属性
	private $name = "张三";
	private $age  = 24;
	//当对不可访问的属性应用isset()或empty()时,__isset()会自动调用
	public function __isset($n)
	{
		return isset($this->$n);
	}
}
//创建学生类对象
$obj = new Student();
//判断私有属性是否存在
if(isset($obj->name))
{
	echo "存在";
}else
{
	echo "不存在或不可访问";
}
复制代码

04魔术方法__unset应用

<?php
class Student
{
	//私有的成员属性
	private $name = "张三";
	private $age  = 24;
	//当对私有属性应用unset()时,魔术方法__unset()自动调用
	public function __unset($n)
	{
		unset($this->$n);
	}
}
//创建学生类对象
$obj = new Student();
//删除对象属性
unset($obj->name);

var_dump($obj);
复制代码

05魔术方法__call应用

<?php
class Student
{
	//私有的成员属性
	private $name = "张三";
	private $age  = 24;
	//当访问不存在或不可访问的方法时,魔术方法__call()自动调用
	//参数:$func是传递过来的方法名称,$args是传递过来的参数数组
	public function __call($func,$args)
	{
		echo "方法{$func}(".implode(',',$args).")不存在或不可访问!";
	}
}
//创建学生类对象
$obj = new Student();
//调用一个不存在的方法
$obj->showInfo("张三",24);
复制代码

06魔术方法__callStatic应用

<?php
class Student
{
	//私有的成员属性
	private $name = "张三";
	private $age  = 24;
	//用静态化方式访问不存在或不可访问的方法时,魔术方法__callStatic()自动调用
	//参数:$func是传递过来的方法名称,$args是传递过来的参数数组
	public static function __callStatic($func,$args)
	{
		echo "方法{$func}(".implode(',',$args).")不存在或不可访问!";
	}
}
//用静态化方法调用showInfo()方法
Student::showInfo('张三四',24,'男');
复制代码
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享