php面向对象中抽象类与接口的使用:

本文对比了接口与抽象类的特点及使用方式,介绍了抽象方法、属性等关键概念,并阐述了两者在实现时的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

接口and抽象类


代码示例:

// 接口
/*
接口方法不能用 public private protected static abstract final 等修饰词修饰
系统会将方法指定死为 public abstract
成员属性只能是静态常量 const 
接口可以多继承 implements N
*/
interface Obj
{
	// static $name = 'fantasy'; //Interfaces may not include member variables
	const Name = 'fantasy';
	function get();
	function set();
	function del();
}
abstract class R implements Obj
{
	// 实现接口的部分抽象方法 此类变成了抽象类
	function get(){}
}
class Router extends R
{
	// 实现剩余的抽象方法
	function set(){}
	function del(){}
}
// 抽象类
/*
抽象类(abstract class class_name)里面至少有一个抽象方法(abstract function func_name(); 没有abstract修饰的方法 function func_name(); 会报错 说方法没有结构体)
全是抽象方法也可以
抽象类里面允许有(各种权限的)属性
抽象类单继承 extends 1
*/
abstract class Base
{
	public $name='base';
	protected $age=12;
	private $sex = '男';

	abstract function foo();
	abstract function exp();
	function index()
	{
		echo 'this is a abstract class<br>';
	}
}
abstract class Ext extends Base
{
	public function foo()
	{
		echo '实现抽象类的foo方法,不然new不了';
	}
	/*public function exp()
	{
		echo '实现抽象类的exp方法,不然new不了';
	}*/
}
class App extends Ext
{
	public function exp()
	{
		echo '实现抽象类的exp方法,不然new不了';
	}
}

总结:

1) 抽象方法 abstract function FUNC_NAME();

2) 接口的方法不允许用修饰词(系统指定死为 abstract public) 属性必须用const


 定义继承方法属性
抽象类abstract class CLASS_NAME extends 1 至少一个抽象方法  属性可以是各种权限
接口interface IF_NAMEimplements N全部抽象方法,不允许修饰词 属性只能是静态常量 const

实现 抽象类/接口 部分方法的class是抽象class


理解:

抽象类 定义好的封装类 给用户一些可扩展的自由,用户自由实现自己的方法

接口 严格的结构限制

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值