Home  >  Article  >  Backend Development  >  What is the usage of abstract class in php

What is the usage of abstract class in php

WBOY
WBOYOriginal
2022-03-03 11:46:511658browse

In PHP, abstract classes are mainly used for type hiding and serving as global variables. They can construct an abstract description of a fixed set of behaviors. This set of behaviors can have any possible specific implementation method, as long as There is an abstract method in a class, and this class is an abstract class.

What is the usage of abstract class in php

The operating environment of this article: Windows 10 system, PHP version 7.1, Dell G3 computer.

What is the use of abstract classes in php

Abstract classes are often used to represent abstract concepts derived from analysis and design of problem areas. They are a series of seemingly different, but essentially An abstraction of the same concrete concept.
Abstract class is incomplete, it can only be used as a base class. In the object-oriented approach, abstract classes are mainly used for type hiding and acting as global variables.

In object-oriented methods, abstract classes are mainly used for type hiding. Construct an abstract description of a fixed set of behaviors, but this set of behaviors can have any possible concrete implementation. This abstract description is the abstract class, and this set of any possible concrete implementations is represented by all possible derived classes. Modules can operate on an abstract body. Since the module relies on a fixed abstraction, it cannot be modified; at the same time, by deriving from this abstraction, the behavioral functions of this module can also be extended.

The example operation is as follows:

<?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(&#39;e2&#39;);
//$obj2->work();

Run the above code, the following error message will be prompted:

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

After deleting the error prompt position and the code comment at the end, change it to the following code:

<?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(&#39;e2&#39;);
$obj2->work();

Test running result:

e2 is working

Recommended learning: "PHP Video Tutorial"

The above is the detailed content of What is the usage of abstract class in php. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn