ホームページ  >  記事  >  バックエンド開発  >  PHP のクラス、オブジェクト、抽象クラス、インターフェイスを 1 つの記事で理解する

PHP のクラス、オブジェクト、抽象クラス、インターフェイスを 1 つの記事で理解する

silencement
silencement転載
2020-01-22 00:07:112751ブラウズ

PHP のクラス、オブジェクト、抽象クラス、インターフェイスを 1 つの記事で理解する

クラスとオブジェクト: 抽象クラス、インターフェイス

抽象クラスとインターフェイス: 抽象クラス (Abstract Class) とインターフェイス (Interface) は、インスタンス化できない特殊な種類です。

抽象クラス:

抽象クラスの抽象メソッドは、特定の実装を持たない空のメソッドです。抽象クラスを使用してサブクラスの機能定義を設定できるため、抽象クラスを使用すると、開発者は特定の親クラス

# からのみ継承し、継承されたサブクラス固有で必要なものを完成させることができます。機能。

抽象クラスを定義するための構文形式は次のとおりです。

abstract class 类名称{
  //抽象类的成员变量列表
  abstract function 成员方法1([参数1],[参数2],……);
  abstract function 成员方法2([参数1],[参数2],……);
  //其他代码
}

抽象クラスは通常のクラスと似ており、次の機能も備えています。メンバー属性とメンバー メソッドの違いは、抽象クラスをインスタンス化できないことです。

以下は、単純で完全な抽象クラスを定義します:

abstract class MyClass{ //定义抽象类
  abstract protected function myFunction($arg); //定义抽象方法
}

PS: 抽象クラスの定義には、キーワード abstract で変更され、何も変更されないものが少なくとも 1 つ含まれている必要があります。実装抽象メソッド。

抽象クラスの実装手順:

抽象クラスでは、抽象メソッドを定義するだけでなく、通常のクラスと同様に、指定された機能を実現する一部のメンバメソッドを定義することができます。継承 クラスを抽象化した後、指定された関数を完了できるこれらのメンバー メソッドを

直接参照できます。

class 子类名称 extends 抽象类名称{
  //子类的成员变量列表
  
  function 抽象方法名称([参数1],[参数2],……){
      //抽象方法的具体实现
  }
  //其他代码
 }

PS: クラスが抽象クラスを継承する場合、そのクラスには抽象クラスで定義されたすべてのメソッドが含まれている必要があります。そうでない場合は、実行時にエラーが発生します。

以下は抽象クラスの実装例です:

abstract class Study{
  abstract function printStudy($name,$lang); //定义一个抽象方法
}
 
class OneStudy extends Study { //定义子类继承于父类
  function printStudy($name,$lang){ //抽象方法的具体实现
      echo $name."正在整理".$lang."……";
  }
 }
 
class TwoStudy extends Study {
  function printStudy($name,$lang){
      echo $name."正在整理".$lang."……";
    }
}
  $first=new OneStudy();
  $first->printStudy("大兵","PHP基础知识");
  echo "";
  $second=new TwoStudy();
  $second->printStudy("小兵","SEO基础知识");

このプログラムの実行結果は次のとおりです:

兵士はPHP の基礎知識を整理しています...…

Xiaobing は SEO の基礎知識を整理しています...

インターフェースを定義します:

インターフェースは、いくつかの空のメンバー メソッドまたはいくつかのクラス定数のみを含むメンバー メソッド宣言のコレクションです。これらの空のメンバー メソッドは、インターフェースを実装するクラスによって実装されます。

インターフェイスを定義するには、キーワード インターフェイスを使用する必要があります。構文形式は次のとおりです:

interface 接口名称{
  //类常量列表
  function 成员方法1([参数1],[参数2],……);
  function 成员方法2([参数1],[参数2],……);
  //其他代码
}

インターフェイスはインスタンス化できないため、インターフェイスには構築メソッドや構造化メソッドはありません。 . のセットを与えるだけでよい 実装するメンバメソッドの宣言だけで十分です。

以下はシンプルで完全なインターフェイスを定義します:

interface class MyClass{ //定义接口
  public function myFunction($arg); //定义方法
}

インターフェイスの実装プロセス:

クラス、インターフェースも継承できます。インターフェイスは複数のインターフェイスから継承できますが、インターフェイスはクラスから継承できません。インターフェイスを実装するには、キーワードimplementsを使用します。

クラスを使用してインターフェイスを実装する場合、インターフェイスに定義されている少なくともすべてのメソッドが含まれている必要があります。そうでない場合は、実行時にエラーが発生します。

以下はインターフェイスの実装例です:

interface IName{ //定义接口IName
  function setName($name);
  function getName();
  }
  interface IAge{ //定义接口IAge
  function setAge($age);
  function getAge();
  }
  class DaBing implements IName,IAge{ //定义实现接口的类
  private $name;
  private $age;
  function setName($name){
  $this->name=$name;
  }
  function getName(){
  echo "姓名:".$this->name." ";
  }
  function setAge($age){
  $this->age=$age;
  }
  function getAge(){
  echo "年龄:".$this->age;
  }
  }
  $obj=new DaBing();
  $obj->setName("大兵");
  $obj->getName();
  $obj->setAge(25);
  $obj->getAge();

このプログラムの実行結果は次のとおりです:

名前: 兵士 年齢: 25

概要クラスとインターフェイスの違い:

インターフェイスの使用は、キーワードimplementsを通じて実現されます。抽象クラスの操作は、キーワード extends を継承することで実装されます。

インターフェイスにはデータ メンバーがありませんが、抽象クラスにはデータ メンバーがあり、抽象クラスはデータ クロージャを実現できます。

インターフェイスにはコンストラクターはありませんが、抽象クラスにはコンストラクターがあります。

インターフェイス内のメソッドはパブリック型ですが、抽象クラス内のメソッドはプライベート、プロテクト、またはパブリックで変更できます。

クラスは複数のインターフェイスを同時に実装できますが、クラスは 1 つの抽象クラスからのみ継承できます。

インターフェイスにはメンバー メソッドの実装コードを含めることはできませんが、抽象クラスにはメンバー メソッドの実装コードを含めることはできます。

PS: アプリケーションで、特定のクラスにさらに動作を追加する必要がある場合は、これらの動作を組み合わせるインターフェイスを定義できます。特定のデータと動作を再利用する必要がある場合は、これらの変数と関数をカプセル化する抽象クラスを定義する必要があります。


以上がPHP のクラス、オブジェクト、抽象クラス、インターフェイスを 1 つの記事で理解するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はwww.liqingbo.cnで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。