ホームページ  >  記事  >  バックエンド開発  >  PHPオブジェクト指向における[インターフェース]と[ポリモーフィズム]の応用

PHPオブジェクト指向における[インターフェース]と[ポリモーフィズム]の応用

高洛峰
高洛峰オリジナル
2016-11-30 09:54:07785ブラウズ

コードは次のとおりです:
/* インターフェース技術
*
* インターフェースは特殊な抽象クラス、抽象クラスは特殊なクラス
*
* インターフェースと抽象クラスは同じ機能を持ちます
*
* PHPでは単一継承があるため、抽象クラスを使用すると、その抽象クラスを実装するサブクラスは他のクラスを継承できません
*
* 一部の仕様を実装し、他のクラスを継承したい場合。インターフェースを使用するだけです。
*
* インターフェースと抽象クラスの比較
*
* 1. 機能は同じですが、どちらもオブジェクトを作成できず、どちらも実装にはサブクラスが必要です
*
* 2. インターフェースの宣言は抽象クラスの宣言とは異なります
*
* 3. インターフェイスはさまざまな方法で実装されます
*
* 4. インターフェイス内のすべてのメソッドは抽象メソッドである必要があり、(抽象変更を使用せずに) 抽象メソッドのみを宣言できます
*
* 5. のメンバー属性インターフェイスは定数のみ宣言できます。変数は宣言できません
*
* 6. インターフェイス内のメンバーのアクセス権限は public である必要があり、抽象クラス内の最も低い権限は保護されます
*
* インターフェイスを宣言します。 name { };
*
* 7. クラスを使用する インターフェイスを実装するには、extends を使用する代わりに、implements キーワードを使用します
*
* サブクラスが親インターフェイスの抽象メソッドをオーバーライドする場合は、implements (実装) を使用します。 、クラス-インターフェイス、抽象クラス-インターフェイスは実装を使用し、インターフェイス - インターフェイスは拡張 (継承) を使用します
*
* 抽象クラスを使用してインターフェイス内の一部のメソッドを実装できます
* サブクラスにオブジェクトを作成する場合は、すべてを実装する必要がありますインターフェイス内のメソッド
* 別のインターフェイスを継承するインターフェイスを定義できます
* クラスは複数のインターフェイスを実装できます (複数の仕様に従ってサブクラスを開発)。カンマを使用して複数のインターフェイス名を区切ります
* クラスは 1 つのクラスを継承し、1 つのクラスを実装できます1. 複数のインターフェイスを実装できますが、extends ワードは 1 つの親クラスのみを継承できます
*
* 2. extends ワードを使用しない場合、クラスを継承できるので、同時に2つ使用できます
*
* ポリモーフィズム: ポリモーフィズムはオブジェクト指向の 3 つの主要な機能の 1 つです
*
* 「ポリモーフィズム」はオブジェクト指向設計の重要な機能ですこれは、「ポリモーフィズム」とも呼ばれる動的バインディング関数の力を示しています。ポリモーフィック機能により、ソフトウェアは開発およびメンテナンス中に完全な拡張を実現できます。実際、ポリモーフィズムの最も直接的な定義は、継承関係を持つ異なるクラスのオブジェクトが同じ名前のメンバー関数を呼び出し、異なる反応を生成できるようにすることです。
*
*
*
*
*
*/
//宣言インターフェース
interface デモ{
const HOST="localhost"
const USER="admin";// 追加する必要はありません宣言メソッドは abstract です。デフォルトは次のとおりです。権限は public です
function fun2();
//インターフェースの継承
interface Demo2 extends Demo {
function fun4();
interface Demo3{
function fun5(); );
}
interface Demo4{
function fun7();
}
echo Demo::HOST;//インターフェース内の定数にアクセスできます
class Hello{
function fun8(){
}
}
// Sub クラスはインターフェイス内のすべてのメソッドを実装する必要があります
class UTest extends Helloimplements Demo2, Demo3, Demo4 { //複数のインターフェイスを実装します
function fun1(){
}
function fun2(){
}
function fun3(){
}
関数 fun4(){
}
関数 fun5(){
}
関数 fun6(){
}
関数 fun7(){
}
}
/*--------------- - ------多態性--------------*/
interface Test{
function fun1();
function fun2();
class One は Test{
function を実装します。 fun1(){
echo "aaaaaaaa";
}
function fun2(){
echo "bbbbbbbbbbbb";
}
}
class Two は Test{
function fun1(){
echo "11111111" を実装します。 fun2(){
echo "2222222222";
}
}
//同じインターフェースが同じメソッド、異なるオブジェクト、異なる出力を実装します。これはポリモーフィズムの性能と応用です
$test=new One;
$test->fun1();//a 行を出力
$test->fun2();//b 行を出力
$test =new Two;
$test->fun1();//1 行を出力
$test->fun2();//2 行を出力
/* ------ --------ポリモーフィック アプリケーションの例は、USB デバイスの使用をシミュレートします------*/
//USB インターフェイス
interface USB{
function mount();//USB のマウント方法
function work();//USB の仕組み
function unmount();//USB のアンインストール方法
}
//USB デバイス U ディスクの定義
class Upan 実装 USB{//USB インターフェイスの実装
function mount() {
echo " U ディスクは正常にマウントされました
";
}
function work(){
echo "U ディスクは動作を開始しました
"
}
function unmount(){
echo " U ディスクは正常にアンインストールされました
";
}
}
//USB デバイスを定義します USB マウス
class Umouse は USB を実装します{//USB インターフェイスを実装します
function mount(){
echo " USB キーボードは正常にロードされました< ;br />";
}
function work(){
echo "USB キーボードの動作を開始しました
";
}
function unmount(){
echo "USB キーボードは正常にアンインストールされました
}
}
//コンピュータ クラスを定義します
class Computer{
//USB デバイスの使用方法
function useUSB ($usb){//$usb パラメータは、使用する USB デバイスを示します
$usb-> ;mount ();//デバイスのマウントメソッドの呼び出し
$usb->work();//デバイスの作業メソッドの呼び出し
$usb->unmount();//デバイスのアンマウントメソッドの呼び出し
}
}
//コンピューターのユーザークラスを定義します
class PcUser{
//USB のインストール方法
function install(){
//まずコンピューターを入手します
$pc=new Computer
//USB デバイスを入手します。
$up=new Upan;//U ディスクを持参します
$um=new Umouse;//USB マウスを持参します
//USB デバイスをコンピュータに挿入し、コンピュータの USB デバイスを使用する方法を使用して、リクエストを呼び出します 挿入されたデバイス
$pc->useUSB($up);//U ディスクを挿入
$pc->useUSB($um);//USB マウスを挿入
}
}
//コンピュータ ユーザーをインスタンス化します
$user=new PcUser;
$user->install();//デバイスをインストールします
/*---------------出力内容---------- -- --
U ディスクが正常にロードされました
U ディスクが動作を開始しました
U ディスクが正常にアンインストールされました
USB キーボードが正常にロードされました
USB キーボードが動作を開始しました
USB キーボードが正常にアンインストールされました
--------------- -- ------------------*/
?>

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