phpオブジェクトインターフェースとは何ですか?各種クラスインターフェースコードの詳細説明

伊谢尔伦
リリース: 2023-03-13 07:54:01
オリジナル
1860 人が閲覧しました

オブジェクトインターフェイス

インターフェイスを使用すると、クラスが実装する必要があるメソッドを指定できますが、これらのメソッドの特定の内容を定義する必要はありません。インターフェイスは、標準クラスの定義と同様に、interface キーワードを通じて定義されますが、その中で定義されているメソッドはすべて空です。インターフェイスで定義されるすべてのメソッドはパブリックである必要があります。これはインターフェイスの特性です。

implements

インターフェースを実装するには、implements operatorを使用します。クラスは、インターフェイスで定義されたすべてのメソッドを実装する必要があります。実装しない場合は、致命的なエラーが報告されます。クラスは複数のインターフェイスを実装できます。複数のインターフェイスの名前を区切るにはカンマを使用します。

注1: 複数のインターフェースを実装する場合、インターフェース内のメソッドに同じ名前を付けることはできません。

注2: extends 演算子を使用してインターフェースを継承することもできます。

継承はよく知られたプログラミング機能であり、PHP のオブジェクト モデルも継承を使用します。継承は、クラス、オブジェクト、およびオブジェクト間の関係に影響を与えます。たとえば、クラスを拡張する場合、サブクラスは親クラスのすべての public メソッドと protected メソッドを継承します。サブクラスが親クラスのメソッドをオーバーライドしない限り、継承されたメソッドは元の機能を保持します。継承は機能設計と抽象化に非常に役立ち、同様のオブジェクトに新しい関数を追加することで、これらの共通関数を書き直す必要がなくなります。

注3: autoloadingを使用しない場合、使用前にクラスを定義する必要があります。あるクラスが別のクラスを拡張する場合、親クラスは子クラスの前に宣言する必要があります。このルールは、他のクラスおよびインターフェイスを継承するクラスに適用されます。

注:4: インターフェイスを実装するには、クラスはインターフェイスで定義されているメソッドと完全に一致するメソッドを使用する必要があります。そうしないと、致命的なエラーが発生します。

定数

定数はインターフェースでも定義できます。インターフェイス定数はクラス定数とまったく同じように使用されますが、サブクラスまたはサブインターフェイスによってオーバーライドすることはできません。

クラス内で常に変更されない値を定数として定義できます。定数を定義および使用するときにシンボルを使用する必要はありません。定数の値は固定値である必要があり、変数、クラス属性、数学的演算の結果、または関数呼び出しにすることはできません。定数はインターフェイスでも定義できます。

インターフェースの例:

例 #1 インターフェースの例

<?php

// 声明一个&#39;iTemplate&#39;接口
interface iTemplate
{
    public function setVariable($name, $var);
    public function getHtml($template);
}


// 实现接口
// 下面的写法是正确的
class Template implements iTemplate
{
    private $vars = array();
  
    public function setVariable($name, $var)
    {
        $this->vars[$name] = $var;
    }
  
    public function getHtml($template)
    {
        foreach($this->vars as $name => $value) {
            $template = str_replace(&#39;{&#39; . $name . &#39;}&#39;, $value, $template);
        }
 
        return $template;
    }
}

// 下面的写法是错误的,会报错,因为没有实现 getHtml():
// Fatal error: Class BadTemplate contains 1 abstract methods
// and must therefore be declared abstract (iTemplate::getHtml)
class BadTemplate implements iTemplate
{
    private $vars = array();
  
    public function setVariable($name, $var)
    {
        $this->vars[$name] = $var;
    }
}
?>
ログイン後にコピー

例 #2 拡張可能なインターフェース

<?php
interface a
{
    public function foo();
}

interface b extends a
{
    public function baz(Baz $baz);
}

// 正确写法
class c implements b
{
    public function foo()
    {
    }

    public function baz(Baz $baz)
    {
    }
}

// 错误写法会导致一个致命错误
class d implements b
{
    public function foo()
    {
    }

    public function baz(Foo $foo)
    {
    }
}
?>
ログイン後にコピー

例 #3 複数のインターフェースの継承

<?php
interface a
{
    public function foo();
}

interface b
{
    public function bar();
}

interface c extends a, b
{
    public function baz();
}

class d implements c
{
    public function foo()
    {
    }

    public function bar()
    {
    }

    public function baz()
    {
    }
}
?>
ログイン後にコピー

例 #4インターフェース定数を使用する

<?php
interface a
{
    const b = &#39;Interface constant&#39;;
}

// 输出接口常量
echo a::b;

// 错误写法,因为常量不能被覆盖。接口常量的概念和类常量是一样的。
class b implements a
{
    const b = &#39;Class constant&#39;;
}
?>
ログイン後にコピー

以上がphpオブジェクトインターフェースとは何ですか?各種クラスインターフェースコードの詳細説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート