ホームページ >バックエンド開発 >PHPチュートリアル >PHP におけるオブジェクト指向ポリモーフィックの例の詳細な説明
この記事では主に、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 中国語 Web サイトの他の関連記事を参照してください。