ホームページ  >  記事  >  バックエンド開発  >  PHP ではインターフェイスはどのように使用されますか?

PHP ではインターフェイスはどのように使用されますか?

伊谢尔伦
伊谢尔伦オリジナル
2017-07-03 10:23:321715ブラウズ

Interface

PHP クラスは単一の継承です。つまり、クラスが複数のクラスの機能を必要とする場合、継承は無力です。

abstract クラス

内のすべてのメソッドは抽象メソッドであり、宣言された 変数 はなく、インターフェース内のすべてのメンバーがパブリック権限を持っている場合、この特別な抽象クラスはインターフェースと呼ばれます インターフェースは、interface キーワードを使用して定義されますインターフェイス メソッドを実装するには、implements を使用し、完全に実装する必要があります

インターフェイスの実装

PHP インターフェイス実装の実際の例を以下に示します。ここでは、IPillage という名前のインターフェイスが作成され、実装されます。 :

interface IPillage
{
 function emptyBakAccount();
 function burnDocument();
}

次に、Executive クラスを通じてこのインターフェイスを実装します:

class Executive extends Employee implements IPillage
{
 private $totalStockOptions;
 function emptyBankAccount()
 {
  echo "Call CFO and ask to transfer funds to Swiss bank account.";
 }
 function burnDocuments()
 {
  echo "Torch the office suite.";
 }
}

このインターフェイスを実装する Assistant クラスが存在する可能性があります:

class Assistant extends Employee implements IPillage
{
 function takeMome()
 {
  echo "Taking memo...";
 }
 function emptyBankAccount()
 {
  echo "Go on shopping spree with office credit card.";
 }
 function burnDocuments()
 {
  echo "Start small fire in the trash can.";
 }
}

ご覧のとおり、このインターフェイスは特に便利です。なぜなら、インターフェイスは、特定の動作を発生させるために必要なメソッドの数と各メソッドの名前を定義しますが、インターフェイスでは、さまざまなクラスがさまざまな方法でこれらのメソッドを実装できるからです。この例では、ファイルを書き込む方法として、Assistdnt クラスはファイルをゴミ箱に書き込むだけですが、Executive クラスはより極端な方法 (オフィスを燃やす) でそれを実行します。

複数のインターフェースを実装

会社は正社員全員の努力で成り立っているのに、外部業者の侵入を許すのは不公平です。つまり、請負業者を必要なタスクのみを完了させるように制限しながら、どのようにして従業員に仕事を提供し、会社の機能を侵害するのでしょうか?解決策は、これらのタスクをいくつかのタスクに分割し、必要な複数のインターフェイスを実装することです。 PHPS はこの機能をサポートしています。次の例を考えてみましょう:

<?php
 interface IEmployee{...}
 interface IDeveloper{...}
 interface IPillage{...}
 class Employee implements IEmployee,IDeveloper,iPillage {
 ...
 }
 class Contractor implements IEmployee,IDeveloper {
 ...
 }
?>

抽象クラスとインターフェイスの違い

インターフェイスは特別な抽象クラスであり、モデルの仕様とみなすこともできます。インターフェイスと抽象クラスの一般的な違いは次のとおりです。 サブクラスがインターフェイスを実装する場合、サブクラスはインターフェイス内のすべてのメソッドを (必要かどうかに関係なく) 実装する必要があります。抽象クラスを継承する場合は、必要なメソッドのみを実装する必要があります。メソッド
インターフェイスの場合 インターフェイスで定義されたメソッド名が変更された場合、このインターフェイスを実装するすべてのサブクラスはメソッド名を同期的に更新する必要があり、抽象クラスでメソッド名が変更された場合、そのサブクラスの対応するメソッド名は更新されません。影響を受けますが、新しいメソッドになります
抽象クラスは単一の方法でのみ継承できます。サブクラスが複数の親クラスから継承する必要がある関数を実装する必要がある場合は、インターフェイスを使用する必要があります


コード例

 <?php 
  
 /** 
  * 声明接口Demo 
  * 
  */ 
 interface Demo 
 { 
  
  const NAME = "wangzhengyi"; 
  
  const AGE = 25; 
  
  function fun1 (); // 声明方法默认是public abstract 
  function fun2 (); 
 } 
  
 /** 
  * 声明接口的继承Demo2 
  * 
  * @author wzy 
  *   
  */ 
 interface Demo2 extends Demo 
 { 
  
  function fun3 (); 
  
  function fun4 (); 
 } 
  
 /** 
  * 声明接口Demo3 
  * 
  * @author wzy 
  *   
  */ 
 interface Demo3 
 { 
  
  function fun5 (); 
  
  function fun6 (); 
 } 
  
 /** 
  * 声明父类ParentClass 
  * 
  * @author wzy 
  *   
  */ 
 class ParentClass 
 { 
  
  function fun7 (); 
 } 
  
 /** 
  * 子类必须实现接口中所有的方法 
  * 
  * @author wzy 
  *   
  */ 
 class ChildClass extends ParentClass implements Demo2, Demo3 
 { 
  
  function fun1 (); 
  
  function fun2 (); 
  
  function fun3 (); 
  
  function fun4 (); 
  
  function fun5 (); 
  
  function fun6 (); 
 }

以上がPHP ではインターフェイスはどのように使用されますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。