ホームページ  >  記事  >  バックエンド開発  >  PHP ポリモーフィズムを実装する 2 つの方法の詳細な例

PHP ポリモーフィズムを実装する 2 つの方法の詳細な例

伊谢尔伦
伊谢尔伦オリジナル
2017-06-29 10:09:142062ブラウズ

Java におけるポリモーフィズムの概念は、変数が指すことができるオブジェクトの型を指します。これは、変数宣言型のサブクラスです。オブジェクトが作成されると、その型は変更されません。PHP5 では、変数の型は、数値、文字列、オブジェクト、リソースなどを指すことができます。 PHP5 のポリモーフィズムは変数であるとは言えません。

PHP5ではメソッドパラメータの型ヒント位置にポリモーフィズムが適用されているとしか言えません。 クラスのサブクラス オブジェクトは、現在の型を型ヒントとして使用して型要件を満たすことができます。 このインターフェイスを実装するすべてのクラスは、インターフェイスの型を型ヒントとして使用して、メソッドのパラメーター要件を満たすことができます。

簡単に言うと、クラスはその親クラスと実装されたインターフェイスの ID を持ちます。



インターフェイスを実装してポリモーフィズムを実現する

<?php
interface User{ // User接口
    public function  getName();
    public function setName($_name);
}
class NormalUser implements User { // 实现接口的类.
    private $name;
    public function getName(){
        return $this->name;
    }
    public function setName($_name){
        $this->name = $_name;
    }
}
class UserAdmin{ //操作.
    public 
static
 function  ChangeUserName(User $_user,$_userName){
        $_user->setName($_userName);
    }
}
$normalUser = new NormalUser();
UserAdmin::ChangeUserName($normalUser,"Tom");//这里传入的是 NormalUser的实例.
echo $normalUser->getName();
?>

インターフェイスと合成を使用して複数の継承をシミュレートします

合成を通じて多重継承をシミュレートします。 PHP では多重継承はサポートされていません。コードを再利用するために複数のクラスのメソッドを使用したい場合、何か方法はありますか?

それが合成です。あるクラスで、別のクラスの

属性

を設定します。

次の例は、多重継承をシミュレートします。

インターフェースの例

概念的な例を書きます。 私たちはオンライン販売システムを設計していますが、ユーザー部分は次のように設計されています。ユーザーはNormalUser、VipUser、InnerUserの3種類に分類されます。ユーザーが購入した製品の価格は、ユーザーのさまざまな割引に基づいて計算する必要があります。また、将来の拡張やメンテナンスのためにスペースを確保しておく必要があります。 りー

以上がPHP ポリモーフィズムを実装する 2 つの方法の詳細な例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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