接口
//多接口继承
interface iComputer1
{
public function version();
}
interface iComputer2
{
const str1 = '运行win7';
}
interface iComputer extends iComputer1,iComputer2
{
public function work();
}
//抽象类不用全部实现接口方法
abstract class Note1 implements iComputer
{
public function version()
{
echo '笔记本';
}
}
class Note extends Note1
{
public function work(){
echo self::str1;
}
}
//普通类必须全部实现接口方法
class Desk implements iComputer
{
public function version(){
echo '台式机';
}
public function work()
{
echo '运行win10';
}
}
class Run
{
public static function sec($type)
{
$type->version();
$type->work();
}
}
$note = new Note();
$desk = new Desk();
$run = Run::sec($note);
效果图
Trait
<?php
//trait:与抽象类,接口一样不能实例化,只能嵌入到宿主类中使用
//trait是一个特殊类:1:常规或静态属性方法2:抽象属性方法 但是不能用类常量
trait tDemo
{
public static $name = '张三';
public static $sex = '男';
public $age;
public static function getName()
{
echo self::$name;
}
}
class Dad
{
public static $name1 = 'Tom';
public static function getName()
{
echo self::$name1;
}
}
//属性不能重名 否则报错
//能实现代码的复用
//子类中use trait 当继承的父类方法重名时 trait的优先级大于父类
//优先级顺序 子类>trait>父类
class Son extends Dad
{
use tDemo;
}
Son::getName();
echo Son::$sex;
图例
总结
有点难,脑子不够用,只能想点简单的例子,需要多看看视频消化一下