zoukankan      html  css  js  c++  java
  • PHP继承及实现

     

    php学习已经有一段时间了,来对之前的知识积累做个记录。

    php实现单继承和多实现。单继承: 一个类只能有一个extends 抽象类 ,多实现 :一个类可以implements 多个接口

    举个简单的栗子(栗子可能举得不是很贴切,表达意思就行了):

    下面这个抽象类:Person,表示一个人的共有属性 性别sex,两个行为:抽象的干活doWhat(),以及工作work()

     
     public abstract  class   Person{
    
    
    
        private $sex;
    
    
    
        public function getSex(){
    
            return $this->sex;
    
        }
    
    
    
        public function setSex($value){
    
            $this->sex=$value;
    
        }
    
    
    
        abstract function doWhat();
    
    
    
        protected function work(){
    
            echo '我在工作!';
    
        }
    
    
    
    }

    这个时候会发现,这个抽象类还少了一些必须的行为比如 吃饭 和睡觉。因此我们接着定义一个接口PersonAction

     
     public interface PersonAction{
    
           public function eat();
    
           public function sleep();
    
     }

    然后我们定义个学生来继承 Person 类 和 实现 PersonAction接口

     
    public class student1 extends Person implements PersonAction{
    
        private $school;
    
    
    
        public function setSchool($value){
    
            $this->school=$value;
    
        }
    
    
    
        public function getSchool(){
    
            return $this->school;
    
        }
    
    
    
        public function doWhat()
    
        {
    
           echo '我去上学';
    
        }
    
    
    
        public function eat()
    
        {
    
            echo '在学校吃饭';
    
        }
    
    
    
        public function sleep()
    
        {
    
            echo '晚上睡觉';
    
        }
    
    
    
    }

     一个学生就跃然纸上了。

    除了以上行为,Person还有一个独有的行为那就是思考,也是人类区别动物最大的不同点。因此 我们又要声明一个思考的行为。

    interface PersonThink{
    
        public function thinklife();  //思考人生
    
    }
     
    ok,那么学生就变成了:
    public class student1 extends Person implements PersonAction,PersonThink{
    
        private $school;
    
    
    
        public function setSchool($value){
    
            $this->school=$value;
    
        }
    
    
    
        public function getSchool(){
    
            return $this->school;
    
        }
    
    
    
        public function doWhat()
    
        {
    
           echo '我去上学';
    
        }
    
    
    
        public function eat()
    
        {
    
            echo '在学校吃饭';
    
        }
    
    
    
        public function sleep()
    
        {
    
            echo '晚上睡觉';
    
        }
    
    
    
        public function thinklife()
    
        {
    
           echo '我在想作业';
    
        }
    
    
    
    }

     这样学生就可以开始做作业了。还有学生做作业的时候,如果遇到不会的,就会上网查资料,但是查资料这个动作又不是所有person都必须的。这个时候就可以使用trait

    (trait 的详细参见官网:http://php.net/manual/zh/language.oop5.traits.php)

     
     
     trait  StudentHelp{
    
                public function searchIntnet(){
    
                           echo '上网查资料';
    
                }
    
      }

    这个时候学生就可以上网查资料了

    public class student1 extends Person implements PersonAction,PersonThink{
    
    
    
        use StudentHelp;
    
    
    
        private $school;
    
    
    
        public function setSchool($value){
    
            $this->school=$value;
    
        }
    
    
    
        public function getSchool(){
    
            return $this->school;
    
        }
    
    
    
                 ……
    
        public function thinklife()
    
        {
    
            $this->searchIntnet();
    
           echo '我在想作业';
    
        }
    
    
    
    }
    这个时候学生就可以上网查资料来写作业啦。
          
    由上面几个例子我们可以看到,php只能做到单继承和多实现,interface 一般定义必须行为,abstarct 一般定义对象的公用属性和行为。但往往具有一般通用性的行为建议使用trait. (比如学生上网查资料,来写作业,但是农业工作者就不一定会上网来种地了)
     
     
     
     
     
  • 相关阅读:
    Go 1.16新特性embed包及其使用
    PHP汉字转拼音的方法
    git diff ^M的消除
    转 C/C++中extern关键字详解
    idea安装步骤_IntelliJ IDEA 2019.3安装激活教程
    intellij idea 的全局搜索快捷键方法
    多边形面积计算及顶点顺逆时针方向判断
    凸多边形碰撞检测的分离轴算法(SAT)
    使用PCA方法创建OBB(oriented boundingbox)包围盒
    2021/12/08今日旧闻
  • 原文地址:https://www.cnblogs.com/xulele/p/5681004.html
Copyright © 2011-2022 走看看