PHP におけるオブジェクト指向ポリモーフィックの例の詳細な説明

小云云
リリース: 2023-03-21 16:34:01
オリジナル
1221 人が閲覧しました

この記事では主に、PHP におけるオブジェクト指向のポリモーフィズムの例について詳しく説明します。ポリモーフィズムとは、PHP でクラスを使用するコンテキストに応じてクラスの性質と動作を再定義または変更する機能を指します。多態性を達成するためのオーバーロードはサポートしていませんが、PHP はさまざまな方向で多態性効果を達成できます。

は次のとおりです:

class a{    function test($i){ // $i可以是任何类型的变量
        print_r $i;
    }
}
ログイン後にコピー

上の例から、PHP は弱い型指定の言語であるため、$i は任意の型の変数になり得ることがわかります。このように、関数はパラメーターの型を変更することでオーバーロード メソッドを実装できます。 Java などの厳密に型指定された言語では。

この形式は、JAVA のパラメータ型のオーバーロードよりも便利で効率的ですが、次のような問題もあります:

<?php/**
教师类有一个drawPolygon()方法需要一个Polygon类,用来画多边形,此方法内部调用多边形的draw()方法,但由于弱类型,我们可以传入Circle类,就会调用Circle类的draw方法,这就事与愿违了。甚至可以传入阿猫、阿狗类,如果这些类没有draw()方法还会报错。*/class Teacher{    function drawPolygon($polygon){ 
        $polygon->draw(); 
    }    
}class Polygon{    function draw(){        echo "draw a polygon";
    }
}class Circle{    function draw(){        echo "draw a circle";
    }
}?>
ログイン後にコピー

このような柔軟なポリモーフィズムには、PHP5.3 以降、何らかの制御が必要であることがわかります。

// 仿java,在变量参数前加一个限制类名
    function drawPolygon(Polygon $polygon){ 
        $polygon->draw(); 
    }
ログイン後にコピー

これにより、渡されるのは Polygon とそのサブクラスのみに制限されます。

パラメーターの数を変更するオーバーロードもあります。これは、PHP がメソッドのオーバーロードをサポートしていないため、次のように実装するにはいくつかの代替メソッドが必要です。

<?php// 通过可变参数来达到改变参数数量重载的目的
// 不是必须传入的参数,必须在函数定义时赋初始值function open_database($DB, $cache_size_or_values=null, $cache_size=null)
{    switch (function_num_args())  
// 通过function_num_args()函数计算传入参数的个数,根据个数来判断接下来的操作   
 {        case 1:            
 $r = select_db($DB);           
  break;        case 2:           
   $r = select_db($DB, $cache_size_or_values);           
    break;        case 3:           
     $r = select_db($DB, $cache_size_or_values, $cache_size);            
     break;
    }    return is_resource($r);
}?>
ログイン後にコピー

関連する推奨事項:

-指向継承、ポリモーフィズムとカプセル化の紹介

PHPポリモーフィズムと動的バインディング

オブジェクト指向ポリモーフィズム手法をPHPで実装した事例

以上がPHP におけるオブジェクト指向ポリモーフィックの例の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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