ホームページ  >  記事  >  バックエンド開発  >  PHP でのキーワード インターフェイスと実装の詳細な図による説明

PHP でのキーワード インターフェイスと実装の詳細な図による説明

墨辰丷
墨辰丷オリジナル
2018-05-21 14:54:461573ブラウズ

PHP クラスは単一継承です。つまり、クラスが複数のクラスの機能を必要とする場合、PHP はクラス インターフェイス テクノロジを導入します。以下の記事では、主に PHP のインターフェースと実装に関する関連情報を紹介します。必要な方は一緒に参照してください。

PHPインターフェース

PHPクラスは単一継承です。つまり、クラスが複数のクラスの機能を必要とする場合、PHPはクラスインターフェーステクノロジーを導入します。 。

抽象クラス内のすべてのメソッドが抽象メソッドであり、変数が宣言されておらず、インターフェイス内のすべてのメンバーがパブリック権限を持っている場合、この特別な抽象クラスはインターフェイスと呼ばれます。

インターフェースはキーワードinterfaceを使用して定義され、キーワードimplementsはインターフェース内のメソッドを実装するために使用されます。これは完全に実装する必要があります。

クラスへのインターフェースの適用

1. キーワード: インターフェース

2. キーワード: 実装

1. インターフェースの導入と作成

インターフェース: すべて抽象または特殊なメンバー属性定数の抽象クラス。

ルール:

1. クラス内のすべてのメソッドは抽象メソッドです。

2. 抽象メソッドの場合は抽象を追加する必要はありません。

3. インターフェースの抽象メソッド属性は public です。

4. メンバー属性は定数である必要があります。

フォーマットコードは次のとおりです:

interface demo { 
const NAME = "常量对象属性"; 
function fun1(); 
function fun2(); //抽象方法。 
}

2. インターフェースのアプリケーションと仕様

インターフェース参照はクラス継承キーワードextendsとは異なりますが、インターフェースはキーワードimplementsを使用できます。複数の場合は引用してカンマで区切ります

1. 形式: 共通クラス参照インターフェイス

class MyPc implements demo , demo2 , demo3 { 
... 
}

2. 形式: 抽象クラス アプリケーション インターフェイスの例

abstract class MyPc implements demo , demo2 , demo3 { 
... 
}

3. 親クラス参照インターフェイスを継承します。 coexist

class MyPc extends Root implements demo , demo2 , demo3 { 
... 
}

最初に継承し、次にインターフェイスを継承し、単一継承の複数のインターフェイスを継承します。

4. 形式: インターフェースとインターフェースの継承

interface demo3 extends demo { 
... 
}

サンプルコードは次のとおりです:

<?php 
interface demo { 
 const NAME = "名称"; 
 function fun1(); 
 function fun2(); 
} 
interface demo2 { 
 function fun3(); 
 function fun4(); 
} 
interface demo3 { 
 const TEST = "Test"; 
 function fun5(); 
} 
class MyPc implements demo, demo2 { 
 function fun1() { 
 echo "++++++++++<br />"; 
 } 
 function fun2() { 
 echo "----------<br />"; 
 } 
 function fun3() { 
 echo "1111111111<br />"; 
 } 
 function fun4() { 
 echo "2222222222<br />"; 
 } 
} 
class MyPs extends MyPc implements demo3 { 
 function fun5() { 
 echo "继承类后引用接口"; 
 } 
} 
$p = new MyPs; 
$p->fun1(); 
$p->fun2(); 
$p->fun3(); 
$p->fun4(); 
$p->fun5(); 
?>

たとえば、インターフェースはキーワードinterfaceを使用して定義され、キーワードimplementsは次のようになります。インターフェイス メソッドを実装するために使用され、完全に実装する必要があります。

コード例は次のとおりです:

<?php 
//定义接口 
interface User{ 
 function getDiscount(); 
 function getUserType(); 
} 
//VIP用户 接口实现 
class VipUser implements User{ 
 // VIP 用户折扣系数 
 private $discount = 0.8; 
 function getDiscount() { 
  return $this->discount; 
 } 
 function getUserType() { 
  return "VIP用户"; 
 } 
} 
class Goods{ 
 var $price = 100; 
 var $vc; 
 //定义 User 接口类型参数,这时并不知道是什么用户 
 function run(User $vc){ 
  $this->vc = $vc; 
  $discount = $this->vc->getDiscount(); 
 $usertype = $this->vc->getUserType(); 
  echo $usertype."商品价格:".$this->price*$discount; 
 } 
} 
$display = new Goods(); 
$display ->run(new VipUser); //可以是更多其他用户类型 
?>

この例を実行すると、出力は次のようになります:

VIP ユーザー製品の価格: 80 元

この例は、PHP インターフェイスの簡単なアプリケーションを示します。この例では、ユーザー インターフェイスはユーザーの割引を実装し、VipUser クラスは特定の割引係数を実装します。最後に、製品カテゴリ「Goods」は、ユーザー インターフェイスに基づいてさまざまなユーザーの見積もりを実装します。

この例は、PHP インターフェースの使用法を示すことに限定されており、その科学的性質には関与しません。

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

PHP は、クラスを継承するときに複数のインターフェースを同時に実装することもできます:

class 子类 extends 父类 implemtns 接口1, 接口2, ... 
{ 
 ...... 
}

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

インターフェースは特別な抽象クラスであり、それもモデルの仕様として見ることができます。インターフェイスと抽象クラスの一般的な違いは次のとおりです。

1. サブクラスがインターフェイスを実装する場合、サブクラスはインターフェイス内のすべてのメソッドを (必要かどうかに関係なく) 実装する必要があります。抽象クラスを継承する場合は、必要なのはインターフェイスのみです。必要なメソッドを実装します。

2. インターフェイスで定義されたメソッド名が変更された場合、このインターフェイスを実装するすべてのサブクラスはメソッド名を同期的に更新する必要があり、抽象クラスのメソッド名が変更された場合、そのサブクラスの対応するメソッド名は変更されません。影響を受けます。(古いメソッドの実装と比較して) 新しいメソッドになるだけです。

3. 抽象クラスは 1 つだけ継承できます。サブクラスが複数の親クラスから継承する必要がある関数を実装する必要がある場合は、インターフェイスを使用する必要があります。

<?php
//简单定义实现接口
interface UserInterface{ //定义user接口
 function getname();
}
interface TeacherInterface{ //定义teacher接口
 function getLengthofService();
}
class User implements UserInterface{ //实现user接口
 private $name="nostop";
 public function getName(){
  return $this->name;
 }
}
class Teacher implements TeacherInterface{ //实现teacher接口
 private $age=23;
 public function getLengthofService(){
  return $this->age;
 }
}
$user=new User();
echo $user->getName().&#39;<br />&#39;;//nostop
$teacher=new Teacher();
echo $teacher->getLengthofService().&#39;<br />&#39;;//23
//继承类实现接口
class GraduResultudent extends User implements TeacherInterface{ //继承User类 实现接口
 private $teacher;
 public function __construct(){  //定义构造函数
  $this->teacher=new Teacher(); //实例化Teacher对象
 }
 public function getLengthOfService(){ //实现TeacherInterface接口的方法
  return $this->teacher->getLengthOfService();
 }
}

class Result{
 public static function getUserName(UserInterface $_user){ //注意:这里面的类型变成接口类型
  echo "Name is ".$_user->getName().&#39;<br />&#39;;
 }
 public static function getLengthOfService(TeacherInterface $_teacher){ //注意:这里面的类型变成接口类型
  echo "age is ".$_teacher->getLengthOfService();
 }
}

$object=new GraduResultudent();
Result::getUserName($object); //Name is nostop
Result::getLengthOfService($object); //age is 23
echo "<br />";
//接口实现用户的折扣
interface People{ //定义接口
 function getUserType();
 function getCount();
}

class VipUser implements People{ //实现接口
 //用户折卡系数
 private $discount=0.8;
 function getUserType(){
  return "VIP用户";
 }
 function getCount(){
  return $this->discount;  
 }
}

$vip=new VipUser(); //实现化对象
echo $vip->getUserType().&#39;商品价格:&#39;.$vip->getCount()*100; //VIP用户商品价格:80

class Goods{
 var $price=100;
 var $member;
 function run(People $member){ //注意:这里面的参数类型是接口类型
  $this->member=$member;
  $discount=$this->member->getCount();
  $usertype=$this->member->getUserType();
  echo $usertype."商品价格:".$this->price*$discount;
 }
}
$display=new Goods();
$display->run(new VipUser);//VIP用户商品价格:80

?>

関連する推奨事項:

php での implements の使用例の詳細

php implements 詳しい使用手順

phpでimplementsを使用するための手順

以上がPHP でのキーワード インターフェイスと実装の詳細な図による説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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