interface、abstract及trait的基本使用

1 篇文章 0 订阅

interface:中文名叫接口,是一种只有常量成员和成员方法的抽象类,接口是一种特殊的抽象类,在程序中起到规范的作用。
1、接口的声明:
接口使用关键字interface进行声明,接口中的成员方法默认是公有的因此不需要使用public进行修饰。
eg:

<?php
interface IAnimal
{
    const NAME = '动物';

    function eat();

    function play();

    function sleeps();
}

2、特点:
① 接口是不能被实例化的。
② 接口使用interface进行声明;implements进行实现,使用逗号隔开可以多继承。
③ 继承它的子类必须实现其中的所以方法。
④ 不能包含成员变量;可以有常量成员。
⑤ 可以直接使用接口名称在接口外面获取常量成员的值。

echo IAnimal::NAME;

eg:

<?php
class Cat implements IAnimal,IBiology
{
    public function eat()
    {
        echo '猫爱吃鱼';
    }

    public function play()
    {
        echo '猫爱玩游戏';
    }

    public function sleeps()
    {
        echo '猫整天睡大觉';
    }

    public function breathe()
    {
        echo '猫和其他生物一样要呼吸';
    }
}

总结:接口可以看做是一个固定类的模板,子类的方法必须遵循接口类的方法名。这样在协同开发的时候就起到了一定的作用,这样就可以避免我们在调用别人开发的方法时不知道方法名的尴尬了。

abstract:中文叫抽象类,抽象类说白了就把类像的部分抽出来。任何一个类,如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的。
1、抽象类的声明:
抽象类是在class前面加上abstract 关键字进行声明的;抽象类里可以有成员属性和成员方法。
eg:

<?php
abstract class Animal
{
    public $name = '动物';
	
	//强制要求子类定义的方法
	abstract public function breathe();
	
	//普通方法
    public function eat($name, $foot)
    {
        echo $name . '爱吃' . $foot;
    }

    public function play(){}

    public function sleeps(){}
}

2、特点:
① 抽象类不能被直接实例化。
② 抽象类通常具有抽象方法。
③ 抽象类是使用 extends 进行继承的。
④ 继承它的子类可以不实现其中的非抽象方法。
eg:

<?php
class Dog extends Animals
{
    public function breathe()
    {
        echo '狗狗也要呼吸';
    }
    
    public function eat($name, $foot)
    {
        echo $name . '不爱吃' . $foot;
    }
}

总结:与接口不同抽象类提供了具体实现的标准,而接口则是纯粹的模版。在既需要统一的接口,又需要实例变量或缺省的方法的情况下,就可以使用抽象类。

trait:trait的出现就是为了解决PHP方法可以复用但又是单继承而无法达到更多复用的问题。
1、用法:通过在类中使用use 关键字。
eg:

<?php
trait Log
{
    public function w($text)
    {
        echo $text . '写入日志';
    }
}
<?php
class Dog extends Animals
{
    use Log;

    public function breathe()
    {
        
    }
}

(new Dog())->w('吃饭');

2、特点:
① Trait 可以引入多个, 多个trait中存在同名方法时, 需要指定使用哪个方法。
② 引入方法与现有方法重名时, 会优先调用类中已定义的方法, 其优先级顺序为: 当前类方法>trait方法>父类方法。
③ trait 中可以定义抽象方法, 语法与抽象类相同。
④ trait 中可以定义成员变量和静态成员变量。
⑤ 在trait 代码块中还可以引入其他trait代码块。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值