ホームページ  >  記事  >  バックエンド開発  >  PHPオブジェクト指向インターフェースの詳細説明(コード例)

PHPオブジェクト指向インターフェースの詳細説明(コード例)

易达
易达オリジナル
2020-05-26 10:12:323424ブラウズ

この記事の目的:

1. PHP におけるインターフェイスの定義を理解する

2. PHP におけるインターフェイスの役割を理解する

3. PHP でのインターフェースの使用シナリオを理解する PHP

4. PHP でのインターフェースの具体的な実装を理解する

#以前の学習アイデアを引き続き継承します。 3w1h

(1) PHP におけるインターフェイスの定義を理解する (何を)

定義: インターフェイスとは、さまざまな種類の

# の共通の動作です。 <span style="background-color: rgb(255, 0, 0); color: rgb(255, 255, 255); border: 1px solid rgb(0, 0, 0);"></span><span style="color: rgb(0, 0, 0);"></span># が定義され、さまざまな関数がさまざまなクラスに実装されます<span style="color: rgb(0, 0, 0);"></span>

または、特定の物がどのような動作をしなければならないかを規定する、物の統一仕様として理解することもできます。たとえば、ヒューマン インターフェイスでは、食べる、飲む、排便、おしっこ、歩くなど、人間が持つ必要があるいくつかの方法が規定されています。 、<span style="color: rgb(0, 0, 0);">話す<span style="color: rgb(0, 0, 0); font-family: monospace;">、</span>まばたき<span style="color: rgb(0, 0, 0); font-family: monospace;">、</span>睡眠<span style="color: rgb(0, 0, 0); font-family: monospace;">、</span>思考など。これらの動作がなければ、あなたは普通の人ではありません<span style="color: rgb(0, 0, 0); font-family: monospace;"> </span></span> (2) PHP におけるインターフェースの役割を理解する (理由)

役割:

1. コードを標準化する:

インターフェースを定義すると役立つコードの標準化: 特に一部の大規模プロジェクトでは、統一されたインターフェースを使用することで、開発者はインターフェースを一目見ただけでどのようなサービスを実装したいのかを明確に理解し、正確に知ることができます。同時に、開発者が任意に命名することによって引き起こされる名前の不一致を防ぐこともでき、明瞭さとコードの混乱が開発効率に影響を与えます。

2. コードの保守性の向上: たとえば、流通モールのプログラムを作成したい場合、その中に流通クラスがあり、主に流通機能を担当します。まず、考えたばかりの分布関数の一部をこの分布クラスにカプセル化できます。しかし、時間が経つにつれて、既存のクラスが新しいニーズを満たせなくなったことがわかり、このクラスを再設計する必要があることがわかります。ただし、最悪のシナリオは、このクラスが現時点では役に立たないように見えることです。役に立ちませんが、このクラスはコード内の別の場所で参照される可能性があるため、完全に変更すると非常に問題が発生します。しかし、最初にそれをインターフェースとして定義し、そのインターフェースにディストリビューションの主要な機能のいくつかを配置し、次にこれらのインターフェースを具体的に実装する別のディストリビューション・クラスを定義する場合、このインターフェースを使用する必要があるのは、既に実装されているクラスを参照するためだけです。インターフェース関連のクラスを利用することで、将来変更したくなっても別のクラスを参照するだけで済むため、コードの保守性や拡張性が向上します。

3. コードの結合度を高め、低結合にする

# (3) PHP のインターフェイスの使用シナリオを理解する (どこ)

シナリオ: その機能と組み合わせると、使用シナリオは基本的に次のとおりです。

1. クラスをより標準化したい場合は、このクラスのインターフェイスを定義してから、そのクラスのすべてのインターフェイスを定義します。このインターフェイスを継承します。 すべてのクラスは、インターフェイスで定義されたメソッドを実装する必要があります。

2. コードの保守性、再利用性、スケーラビリティを向上させたい場合は、特に大規模な開発に参加する場合には、それを検討することもできます。このとき、どのインターフェースを先に定義するかを検討する必要があります。これは仕様を先に決めるのと同じです。仕様が決まったら、分業・協力することで効率が上がります。

(4) 、PHP におけるインターフェイスの具体的な実装を理解する (方法)

概要:

1. インターフェイスの定義 インターフェイス インターフェイス名 { }

2.インターフェイス内のメソッド {} がありません。これは、内部のメソッドに特定の実装部分がないことを意味します

3。クラス実装インターフェイスの定義は、クラス A 実装インターフェイスなどのキーワードimplements によって行われます。 {}

4. クラスがインターフェースを実装したい場合は、そのインターフェースによって定義されたすべてのメソッドを実装する必要があります。

5. インターフェースはインスタンス化できません

6。クラスのインスタンスがインターフェイスが実装されているかどうかを判断するには、instanceof を使用します。たとえば、A オブジェクト インスタンス、instanceof B インターフェイス

true が返された場合、A オブジェクト インスタンスに対応するクラスが B インターフェイスを実装していることを意味します

7. インターフェースは extends を通じて継承できます 別のインターフェース

8. クラスがサブインターフェイスを実装したい場合、サブインターフェイスのメソッドを実装するだけでなく、親インターフェイスのすべてのメソッドも実装する必要があります

各概要これは実践に基づいています。 それでは、特定のコード

#(5)、特定のコード

#1、ケース 1# # を通して、上記の概要を 1 つずつ実証してみましょう

#練習目標:

1. インターフェースの定義 インターフェース名 { }

2. インターフェースのメソッドには {} がありません。 、内部のメソッド 特定の実装部分はありません

<?php
//接口定义
interface Action{
    public function eat();
    public function walk();
    public function sleep();
}
?>

実行結果: 空白でエラーは報告されません

2. ケース2

実践的な目標:

1. クラスは、キーワードimplements を使用してインターフェースの定義を実装する必要があります (クラス A はインターフェース {}

2 を実装する必要があります)。インターフェイスの場合、インターフェイス定義を実装する必要があります。すべてのメソッド

<?php
//接口定义
interface Action{
    public function eat();
    public function walk();
    public function sleep();
}
//定义实现接口的类
class Monkey implements Action{
    //一旦要实现一个接口,就必须要实现接口里面的所有方法
    public function eat(){}
    public function walk(){}
    public function sleep(){}
}
$monkey = new Monkey();

?>

インターフェイスを実装していないメソッドの実行結果は次のとおりです:

致命的エラー:クラス モンキーには 3 つの抽象メソッドが含まれているため、抽象宣言するか、D:\E-class\class-code\classing\index.php の 11

行目に残りのメソッド (Action:: Eat、Action::walk、Action::sleep) を実装します。インターフェイスを実装した実行結果は次のとおりです:

空白の説明は正しいです


3. ケース 3

練習目標:

1. インターフェイスをインスタンス化できません

<?php
//接口定义
interface Action{
    public function eat();
    public function walk();
    public function sleep();
}
$action = new Action();

?>

の結果は次のとおりです:


致命的エラー: 捕捉されないエラー: インターフェイスをインスタンス化できません D:\E のアクション-class\class-code\classing\index.php:9 スタック トレース: #0 {main} が D:\E-class\class-code\classing\index.php の 9

# 行でスローされました##4、ケース 4


実践的な目標:

1.instanceof を使用して、特定のクラスのインスタンスがインターフェイスを実装しているかどうかを判断します。例: B インターフェイスの A オブジェクト インスタンスのインスタンス

true が返された場合、A オブジェクト インスタンスに対応するクラスが B インターフェイスを実装していることを意味します

<?php
//接口定义
interface Action{
    public function eat();
    public function walk();
    public function sleep();
}
//定义实现接口的类
class Monkey implements Action{
    public function eat(){}
    public function walk(){}
    public function sleep(){}
}
$monkey = new Monkey();
print_r( $monkey instanceof Action );
?>

実行結果は次のとおりです: 1

5、ケース 5


実践的な目標:

1. あるインターフェイスは extends

<?php
//接口定义
interface Action{
    public function eat();
    public function walk();
    public function sleep();
}
//接口继承
interface HigherAction extends Action{
    public function talk();
    public function think();
}

?>

# を通じて別のインターフェイスを継承できます。 ##6. ケース 6

実践的な目標:

1. クラスがサブインターフェースを実装したい場合、サブインターフェース内のメソッドを実装するだけではいけません。 -interface ですが、親インターフェイスのすべてのメソッドも実装します

<?php
//接口定义
interface Action{
    public function eat();
    public function walk();
    public function sleep();
}
//接口继承
interface HigherAction extends Action{
    public function talk();
    public function think();
}
//定义实现子接口的类
class Human implements HigherAction{
    public function eat(){}
    public function talk(){}
    public function walk(){}
    public function sleep(){}
    public function think(){}
}
$human = new Human();

?>

When Human クラスが HigherAction の 2 つのメソッドのみを実装する場合、実行結果は次のようになります:

致命的エラー: Class Human containsしたがって、抽象メソッドを宣言するか、D:\E-class\class-code\classing\index.php の 14 行目で残りのメソッド (HigherAction::think、Action: :walk、Action::sleep) を実装する必要があります。

Human クラスが HigherAction と Action のすべてのメソッドを実装すると、実行結果は次のようになります:

は空白、説明は正しいです

(6) 学んだ内容を適用する

質問: 配信の仕組みは多くの人に馴染みのあるものだと思いますが、配信の仕組みにも違法ではない一般的な2段階配信や、若干違法ではない3段階配信などたくさんの種類があります。実際には、より複雑な配布システムがありますが、どのような種類の配布システムであっても、同様のメソッドが存在します。これらのメソッドをインターフェイス化し、具体的な実装を 2 つのクラスに渡すことを希望します: レベル 2 配布レベル 3 の配布ですが、どうやって行うのでしょうか?

アイデア分析:

1. 最初に配布のパブリック メソッドについて考える

2. これらのメソッドを配布インターフェイスにカプセル化する

3. 定義 2クラス、これら 2 つのクラスにそれぞれ配布インターフェイスを実装させます

特定のコード:

<?php
//分销接口定义
interface Commission{
    //获取会员的直接上级
    public function getParent($uid);
    //获取会员的当期级别
    public function getLevel($uid);
    //获取会员的累计佣金
    public function getTotalCommission($uid);
    //获取会员当期可提现佣金
    public function getCurrCommission($uid);
    //获取会员的累计提现佣金
    public function getTotalApplyPrice($uid);
}
//2级分销
class TwoLevelCommission implements Commission{
    //获取会员的直接上级
    public function getParent($uid){}
    //获取会员的当期级别
    public function getLevel($uid){}
    //获取会员的累计佣金
    public function getTotalCommission($uid){}
    //获取会员当期可提现佣金
    public function getCurrCommission($uid){}
    //获取会员的累计提现佣金
    public function getTotalApplyPrice($uid){}
}
//3级分销
class ThreeLevelCommission implements Commission{
    //获取会员的直接上级
    public function getParent($uid){}
    //获取会员的当期级别
    public function getLevel($uid){}
    //获取会员的累计佣金
    public function getTotalCommission($uid){}
    //获取会员当期可提现佣金
    public function getCurrCommission($uid){}
    //获取会员的累计提现佣金
    public function getTotalApplyPrice($uid){}
}
?>

(7) 概要

1. この記事では主にインターフェイスの定義、関数、およびインターフェイスについて説明します。実装

この記事が皆さんのお役に立てれば幸いです。ありがとうございます。 ! !

以上がPHPオブジェクト指向インターフェースの詳細説明(コード例)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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