PHP以接口方式实现多重继承(完全模拟)--学习笔记

 1.UML类图:

 

 

 

 

2.PHP代码:

复制代码
<?php

/**
 * Created by PhpStorm.
 * User: andy
 * Date: 16-11-23
 * Time: 下午7:57
 */
interface User
{
    function getName();
}

interface Teacher
{
    function getWorkYear();
}

class Student implements User
{
    private $name = 'lisi';

    function getName()
    {
        // TODO: Implement getName() method.
        echo 'Student name is ' . $this->name . '<br />';
    }
}

class GraduateTeacher implements Teacher
{
    private $work_year = 2;

    function getWorkYear()
    {
        // TODO: Implement getWorkYear() method.
        echo 'Teacher work year is ' . $this->work_year . '<br />';
    }
}

class GraduateStudent extends Student implements Teacher
{
    private $teacher;


    public function __construct()
    {
        $this->teacher = new GraduateTeacher();
    }

    function getWorkYear()
    {
        $this->teacher->getWorkYear();
    }
}

class Test
{
    static function getName(User $student)
    {
        $student->getName();
    }

    //当Teacher改成GraduateTeacher,到后面代码行的“Test::getWorkYear($lisi);”就会报错
    static function getWorkYear(Teacher $teacher)
    {
        $teacher->getWorkYear();
    }
}

$lisi = new GraduateStudent();
$lisi->getName();
$lisi->getWorkYear();


echo '<hr />';
Test::getName($lisi);
Test::getWorkYear($lisi); //这里不会报错,因为$lisi所属的类GraduateStudent,实现了Teacher的接口,相当于Teacher身份
复制代码

 

posted @   ok_008  阅读(1269)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
历史上的今天:
2011-11-25 PowerShell应用之-可更新订阅的事务复制
给我写信
点击右上角即可分享
微信分享提示