• 技术文章 >后端开发 >PHP问题

    php的抽象类用法是什么

    长期闲置长期闲置2022-03-03 11:46:51原创100

    在PHP中,抽象类主要用于进行类型隐藏和充当全局变量,可以构造出一个固定的一组行为的抽象描述,这组行为能够有任意个可能的具体实现方式,只要类中有一个抽象方法,这个类就是抽象类。

    本文操作环境:Windows10系统、PHP7.1版、Dell G3电脑。

    php的抽象类用法是什么

    抽象类往往用来表征对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。
    抽象类是不完整的,它只能用作基类。在面向对象方法中,抽象类主要用来进行类型隐藏和充当全局变量的角色。

    在面向对象方法中,抽象类主要用来进行类型隐藏。构造出一个固定的一组行为的抽象描述,但是这组行为却能够有任意个可能的具体实现方式。这个抽象描述就是抽象类,而这一组任意个可能的具体实现则表现为所有可能的派生类。模块可以操作一个抽象体。由于模块依赖于一个固定的抽象体,因此它可以是不允许修改的;同时,通过从这个抽象体派生,也可扩展此模块的行为功能

    实例操作如下:

    <?php
    //抽象类像一个模板,供子类扩展(重写),抽象类里有普通方法(有方法体),也有抽象方法,其中抽象方法没有方法体,且以分号结束。
    //只要有一个抽象方法,那么此类必须定义为抽象类。
    //抽象类不能创建自己的实例,在试图创建抽象类对象时,会产生一个致使错误。
    //在子类里实现抽象类的方法,并且可见性要等于、高于抽象方法的可见性,抽象类(public|protected|private),子类(public|public,protected|有致命错误,且不能被继承)。
    //抽象类不能定义私有方法,可以定义私有属性。
    //如果子类没有扩展(重写)抽象类的抽象方法,会产生致使错误。
    abstract class Employees{
      protected $name = null;
      function __construct($nameStr){
        $this->name = $nameStr;
      }
      abstract public function work();
      public function work1(){
        echo "<p>$this->name</p>";
      }
      //function __destruct(){}
    }
    class Managers extends Employees{
      public function __construct($nameStr){
        parent::__construct($nameStr);
      }
      /*public function work(){//如果子类没有扩展(重写)抽象类的抽象方法,会产生致使错误。
        echo "<p>$this->name is working</p>";
      }*/
    }
    //$obj1 = new Employees();//创建抽象类对象时,会产生一个致使错误。
    $obj2 = new Managers('e2');
    //$obj2->work();

    运行上述代码,会提示如下错误信息:

    Fatal error: Class Managers contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (Employees::work) in D:\phproot\test\ClassDemo.php on line 26

    将错误提示位置及末尾位置代码注释删除后,改为如下代码:

    <?php
    //抽象类像一个模板,供子类扩展(重写),抽象类里有普通方法(有方法体),也有抽象方法,其中抽象方法没有方法体,且以分号结束。
    //只要有一个抽象方法,那么此类必须定义为抽象类。
    //抽象类不能创建自己的实例,在试图创建抽象类对象时,会产生一个致使错误。
    //在子类里实现抽象类的方法,并且可见性要等于、高于抽象方法的可见性,抽象类(public|protected|private),子类(public|public,protected|有致命错误,且不能被继承)。
    //抽象类不能定义私有方法,可以定义私有属性。
    //如果子类没有扩展(重写)抽象类的抽象方法,会产生致使错误。
    abstract class Employees{
      protected $name = null;
      function __construct($nameStr){
        $this->name = $nameStr;
      }
      abstract public function work();
      public function work1(){
        echo "<p>$this->name</p>";
      }
      //function __destruct(){}
    }
    class Managers extends Employees{
      public function __construct($nameStr){
        parent::__construct($nameStr);
      }
      public function work(){//如果子类没有扩展(重写)抽象类的抽象方法,会产生致使错误。
        echo "<p>$this->name is working</p>";
      }
    }
    //$obj1 = new Employees();//创建抽象类对象时,会产生一个致使错误。
    $obj2 = new Managers('e2');
    $obj2->work();

    测试运行结果:

    e2 is working

    推荐学习:《PHP视频教程

    以上就是php的抽象类用法是什么的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:php
    上一篇:php中成员方法的意思是什么 下一篇:php构造方法与成员方法的区别是什么
    PHP编程就业班

    相关文章推荐

    • php cli是什么意思• php怎么判断指定键存不存在• 详解PHP中怎么利用Trait解决单继承问题• js正则表达式和php正则表达式有什么区别• 聊聊多版本Ubuntu中安装php7.2、7.3、7.4的方法

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网