ホームページ >バックエンド開発 >PHPチュートリアル >PHP でのインターフェイスの使用について話します。

PHP でのインターフェイスの使用について話します。

青灯夜游
青灯夜游転載
2020-07-23 17:05:383234ブラウズ

PHP でのインターフェイスの使用について話します。

確かに、PHP インターフェイスにはその目的があります。

これらは、他の開発者向けの契約書、取扱説明書です。ただし、このインターフェイスが何に使用されるのかを理解するのはまだ困難です。

Basic

Interface は、直接インスタンス化することはできませんが、実装することはできる抽象クラスです。

これは基本的な例です

interface MyInterface {
    public function setName(string $name);
    public function getName();
}

class MyClass implements MyInterface {
    private $name; 

    public function setName(string $name) { 
        $this->name = $name; 
    }

    public function getName() {
        return $this->name; 
    }
}

MyClasssetName() メソッドと getName() メソッドを実装する必要があります。これを行わないと、致命的なエラーが発生します。

致命的エラー: クラス MyClass には 2 つの抽象メソッドが含まれているため、抽象として宣言するか、残りのメソッド (MyInterface::setName、MyInterface::getName) を実装する必要があります。

さらに、 Accessibility インターフェイスはパブリックである必要があり、インターフェイス内でクラス メンバーを定義することはできません。

原因

開発者はインターフェイスを使用して、クラスまたはクラスのグループの一般的な動作を記述します。

しかし、なぜ実装をカプセル化することのみを担当し、各クラスの詳細を処理することを担当しないのでしょうか?

デカップリングに!

インターフェイスを使用すると、詳細、つまりこの実装の使用方法を変更せずに実装を変更できます。

より高度な例

キャッシュ システムには次の機能が必要です

  • キャッシュ コンテンツへの保存/セットアップ
  • キャッシュ内のコンテンツを取得します
  • キャッシュ内のコンテンツを削除します
#これに基づいて、次のキャッシュ インターフェイスを作成できます

interface CacheInterface {
    public function set(string $key, $val);
    public function get(string $key);
    public function delete(string $key);
}

このようにして、開発者はキャッシュ インターフェイスを実装する必要があることを知ることができ、その実装方法を知る必要はありません。その結果、キャッシュ システムの使用方法を変更せずに、キャッシュ システムを簡単に切り替えることができます。

したがって、プロジェクトでのキャッシュ システムの使用方法を変更せずに、キャッシュ システムを簡単に変更できます。

Symfony の例

先ほどの例の具体的な応用を見てみましょう。 Symfony の場合、キャッシュ システムを実装する場合のベスト プラクティスは、次のように実行することです。

use Symfony\Contracts\Cache\CacheInterface;

class MyClass {
    private $cache;
    public function __construct(CacheInterface $cache)
    {
        $this->cache = $cache;
    }
}

依存関係注入を通じてクラスにキャッシュ インターフェイスを挿入します。次回キャッシュ システムを変更するときは、MyClass クラスを変更する必要はありません。

複数の実装 VS 多重継承

PHP は多重継承をサポートしていないため、次の方法は不可能です

class MyClass extends ClassX, ClassY {}

の一部これが許可されない理由は、ダイヤモンドの問題によるものです。

ただし、

class ClassY extends ClassX {}
class MyClass extends ClassY {}

は実行できますが、

ClassXClassY は実行できる可能性があります。処理されるものは異なるため、継承を使用することは意味がありません。

複数の動作を実行したい場合は、複数のインターフェイスを持つことができます

class MyClass implements InterfaceX, InterfaceY {}

言い換えると、親クラスを共有する代わりに、一部のクラスに機能の一部を共有させることができます。

概要

PHP インターフェイスはクラスのメソッド テンプレートであり、分離された実装と使用に非常に役立ちます。

この機能は、柔軟性を維持し、すべての開発者が一連のルールに従っていることを確認する必要がある場合に特に役立ちます。

[関連チュートリアルの推奨事項:「

PHP チュートリアル 」]

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

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