ホームページ >バックエンド開発 >PHPの問題 >php はポリモーフィックですか?

php はポリモーフィックですか?

王林
王林オリジナル
2019-10-10 17:51:333000ブラウズ

php はポリモーフィックですか?

1. ポリモーフィズムとは何ですか?

ポリモーフィズムとは、実際には、異なるパラメータに従って異なるメソッドを実行することを意味します。

2. PHP におけるポリモーフィズム

厳密に型指定された言語ではパラメーターを宣言する必要があるため、ポリモーフィズムの概念は一般に、厳密に型指定された言語で議論されます。たとえば、懐中電灯オブジェクトの open メソッドのパラメータには、青色の光のみが許可され、他の光は通過できないと記載されています。ただし、親クラスのレンダリングを使用して多態性を持たせることができます。たとえば、ライトの親クラスを宣言し、他の色のライトがこのライトの親クラスから継承できるようにし、そのパラメータを親クラス ライトとして宣言し、ライトのサブクラスを渡します。いずれにせよ、これは強く型付けされたポリモーフィズムです。

しかし、PHP は型指定が弱い動的言語であり、パラメーターの型を検出しません。何でも渡すことができます。ただし、PHP5.3 バージョンでは、パラメーターをインスタンス化されたオブジェクトとして宣言する場合、パラメーターを特定のオブジェクトとして宣言できます。特定のクラスをポリモーフィックにするには、親クラスのレンダリング メソッドを使用する必要があります;

3. PHP ポリモーフィズムの理解

php はオブジェクト指向のスクリプト言語です。ご存知のとおり、オブジェクト指向言語には、カプセル化、継承、ポリモーフィズムという 3 つの大きな特徴があります。 PHP にはこれら 3 つの特性が備わっている必要があります。

カプセル化とは、PHP が持つクラスの構築プロセスであり、PHP には継承という機能もあります。 PHP ではこのポリモーフィズムだけが非常に曖昧です。その理由は、php が弱い型付け言語であるためです。

Java のポリモーフィズムは非常に明確で、親クラスの参照はサブクラス オブジェクトを指し、インターフェイス参照はインターフェイスを実装するクラス オブジェクトを指します。 Java で変数を宣言する場合は、変数の型を設定して、どのような親クラス参照とインターフェイス参照が存在するかを設定する必要があります。これは PHP には反映されません。PHP で変数を宣言する場合、変数の型を設定する必要はありません。変数はさまざまなデータ型を指すことができます。したがって、php には Java のようなポリモーフィズムがありません。

php には Java のような明確なポリモーフィズムがありませんが、php にポリモーフィズムがないという意味ではありません。次の例を見てください。

abstract class animal{
    abstract function fun();
}
class cat extends animal{
    function fun(){
        echo "cat say miaomiao...";
    }
}
class dog extends animal{
    function fun(){
        echo "dog say wangwang...";
    }
}
function work($obj){
    if($obj instanceof animal){
        $obj -> fun();
    }else{
        echo "no function";
    }
}
work(new dog()); 
work(new cat());

上記のクラスは抽象クラスであり、インターフェイスおよびインターフェイスを実装するクラス オブジェクトも適用できることも示しています。

推奨チュートリアル: PHP ビデオ チュートリアル

以上がphp はポリモーフィックですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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