ホームページ > バックエンド開発 > PHPの問題 > PHP抽象クラスの用途は何ですか

PHP抽象クラスの用途は何ですか

(*-*)浩
リリース: 2023-02-25 22:52:01
オリジナル
2988 人が閲覧しました

抽象クラスは、問題領域の分析と設計から派生した抽象的な概念を表すためによく使用されます。これらは、見た目は異なっていても本質的には同じである一連の特定の概念を抽象化したものです。

PHP抽象クラスの用途は何ですか

#抽象クラスは不完全です。基本クラスとしてのみ使用できます。オブジェクト指向のアプローチでは、抽象クラスは主に型を隠し、グローバル変数として機能するために使用されます。 (推奨学習: PHP ビデオ チュートリアル )

PHP 5 は、抽象クラスと抽象メソッドをサポートしています。抽象として定義されたクラスはインスタンス化できません。クラス内の少なくとも 1 つのメソッドが抽象宣言されている場合は、クラスを抽象宣言する必要があります。抽象として定義されたメソッドは、その呼び出しメソッド (パラメーター) を宣言するだけであり、その特定の関数の実装を定義することはできません。

抽象クラスを継承する場合、サブクラスは親クラス内のすべての抽象メソッドを定義する必要があり、さらに、これらのメソッドのアクセス制御は親クラスと同じ (またはより緩和された) ものでなければなりません。

たとえば、抽象メソッドが protected として宣言されている場合、サブクラスに実装されているメソッドは protected または public として宣言する必要があり、private として定義することはできません。

さらに、メソッドの呼び出し方法が一致している必要があります。つまり、必要なパラメータの型と数が一致している必要があります。

たとえば、サブクラスがオプションのパラメーターを定義しているが、それが親クラスの抽象メソッドの宣言に含まれていない場合、2 つの宣言の間に競合はありません。

これは、PHP 5.4 以降のコンストラクターにも当てはまります。 PHP 5.4 より前のコンストラクター宣言は異なる可能性があります。

抽象クラスの例

<?php
abstract class AbstractClass
{
 // 强制要求子类定义这些方法
    abstract protected function getValue();
    abstract protected function prefixValue($prefix);

    // 普通方法(非抽象方法)
    public function printOut() {
        print $this->getValue() . "\n";
    }
}

class ConcreteClass1 extends AbstractClass
{
    protected function getValue() {
        return "ConcreteClass1";
    }

    public function prefixValue($prefix) {
        return "{$prefix}ConcreteClass1";
    }
}

class ConcreteClass2 extends AbstractClass
{
    public function getValue() {
        return "ConcreteClass2";
    }

    public function prefixValue($prefix) {
        return "{$prefix}ConcreteClass2";
    }
}

$class1 = new ConcreteClass1;
$class1->printOut();
echo $class1->prefixValue(&#39;FOO_&#39;) ."\n";

$class2 = new ConcreteClass2;
$class2->printOut();
echo $class2->prefixValue(&#39;FOO_&#39;) ."\n";
?>
ログイン後にコピー

上記のルーチンは出力します:

ConcreteClass1
FOO_ConcreteClass1
ConcreteClass2
FOO_ConcreteClass2
ログイン後にコピー

以上がPHP抽象クラスの用途は何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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