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

伊谢尔伦
リリース: 2016-11-23 14:08:44
オリジナル
1097 人が閲覧しました

インターフェースを使用すると、特定のクラスが実装する必要があるメソッドを指定できますが、これらのメソッドの特定の内容を定義する必要はありません。

インターフェースは、標準クラスを定義するのと同じように、interface キーワードを通じて定義されますが、その中で定義されているメソッドはすべて空です。

インターフェースで定義されるすべてのメソッドはパブリックである必要があります。これはインターフェースの特性です。

実装

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

注:

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

注:

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

注:

インターフェイスを実装するには、クラスはインターフェイスで定義されたメソッドをまったく同じ方法で使用する必要があります。そうしないと、致命的なエラーが発生します。

定数

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

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

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('{'.$name.'}',$value,$template);
        }
        return $template;
    }
}
//下面的写法是错误的,会报错,因为没有实现getHtml()
class BadTemplate implements ITemplate
{
    private $vars = array();
    public function setVariable($name,$var)
    {
        $this->vars[$name] = $var;
    }
}
ログイン後にコピー

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

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 複数のインターフェースを継承する

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 インターフェース定数を使用する

interface a
{
    const b = 1;
}
//输出接口常量
echo a::b;
//错误写法
class b implements a
{
    const b = 1;
}
ログイン後にコピー

インターフェースと型制約が提供することを保証する良い方法オブジェクトには特定のメソッドが含まれています。 「instanceof 演算子と型の制約」を参照してください。


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