PHP学习笔记3——重载

重载的概念

  • 在其他编程语言中,面向对象的重载是指。方法有相同名称,但是参数列表不相同的情形,但PHP不支持同名函数或同名方法。
  • PHP所提供的“重载”(overloading)是指动态地“创建”属性和方法,通过魔术方法来实现的。
  • 当调用当前环境下未定义或不可见的类属性或方法时,重载方法会被调用。
  • 所有重载方法都必须被声明为public
  • 属性重载只能在对象中进行。
  • 在静态方法中,这些魔术方法将不能被声明为static。

属性重载

使用魔术方法

1. __get()

描述:读取不可访问属性的值时,__get()会被调用。
语法:public mixed__get(string name)

例子代码:

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

2. __set()

描述:再给不可访问属性赋值时,__set()会被调用。
语法:public void__set(string $name,mixed $value)

例子代码:

//当给不可访问属性赋值时,__set()方法会自动调用
	public function __set($n,$v)
	{
		$this->$n=$v;
	}
//修改私有属性
$obj->name="李四";
$obj->age=20;

3. __isset()

描述:在给不可访问属性调用isset()或empty()时,__isset()会被调用。
语法:public bool __isset(string $name)

例子代码:

//当对不可访问属性应用isset()或empty()时。__isset()会自动调用
	public function __isset($n)
	{
		return isset($this->$n);
	}
//判断私有属性是否存在
if(isset($obj->name))
{
	echo "存在";
}else
{
	echo "不存在或不可访问";
}

4.__unset()

描述:当对不可访问属性调用unset时,__unset()会自动调用。
语法:public void__unset(string $name)

例子代码:

//当对私有属性调用unset时,__unset()会自动调用
	public function __unset($n)
	{
		unset($this->$n);
	}
//删除对象属性
unset($obj->name);

方法重载

使用魔术方法

1. __call()

描述:在对象调用一个不可访问方法时,__call()会被调用。
语法:public mixed__call(string $name,array $arguments)

代码例子:

//当访问一个不存在或不可访问方法时,__call()会被调用
	//参数:$func是传递过来的方法名称,$args是传递过来的参数数组
	public function __call($func,$args)
	{
		echo "方法{$func}(".implode(',', $args).")不存在或不可访问!";
	}
//调用一个不存在的方法
$obj->showInfo("张三",21);

2. __callStatic()

描述:用静态方法调用一个不可访问方法时,__callStatic()会被调用。
语法:public static mixed __callStatic (string $name,array $arguments)

代码例子:

//用静态方法调用一个不存在或不可访问方法时,__callStatic()会被调用
	//参数:$func是传递过来的方法名称,$args是传递过来的参数数组
	public static function __callStatic($func,$args)
	{
		echo "static方法{$func}(".implode(',', $args).")不存在或不可访问!";
	}
//用静态化方式调用showInfo方法
Student::showInfo();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值