PHP抽象クラスとその応用

1677 ワード

抽象クラスはインスタンス化できないクラスであり、他のクラスから継承されるベースクラスとしてのみ使用できます.たとえば、Mediaという名前のクラスを考慮すると、Mediaは実際のエンティティではなく、似たような汎化表現を表すので、直接インスタンス化することは望んでいません.このような状況が起こらないことを確認するために、このクラスは抽象的であることを宣言することができます.次に、この抽象クラスを様々な派生Mediaクラスによって継承します.これは、抽象クラスで定義されたすべての方法がサブクラスで実現されなければならないため、サブクラスの直接的な一貫性を保証します.
抽象として宣言されるクラスには、次のように定義の前にキーワードabstractを付ける必要があります.
abstract class Class_Name
{
	//insert attribute definitions here
	//insert mothod definitions here
}

抽象クラスをインスタンス化しようとすると、次のエラー・メッセージが表示されます.
Fatal error: Cannot instantiate abstract class Class_Name in D:\www\test.php on line 7

簡単な例を見てみましょう
<?php
abstract class Fruit {   
	abstract protected function show_msg();   
	//          ,            
	//             :$Shape_Rect = new Shape();   
}   

class Apple extends Fruit {   
	private $name;   
	private $color;
	
	function __construct($name, $color){   
		$this->name = $name;   
		$this->color = $color;   
	}   
	function show_msg(){   
		echo $this->color .' '. $this->name;   
	}   
}   

$apple = new Apple("  ", "  ");   
$apple->show_msg();   
?>

抽象クラスは、派生クラスがその抽象クラスが継承するすべての抽象メソッドを実装する必要があるため、一貫性を確保します.抽象クラスで定義された抽象メソッドが実装されていない場合、致命的なエラーが発生します.
抽象クラスかインタフェースか
インタフェースはいつ、抽象クラスはいつ使用しますか?これは困惑させ、多くの論争をもたらした.しかし、以下の要素はあなたの決定を助けることができます.
  • モデルを作成する場合、このモデルはいくつかの密接に関連するオブジェクトによって採用され、抽象クラスを使用することができます.いくつかの非関連オブジェクトで使用される機能を作成する場合は、インタフェースを使用します.
  • インタフェースは、複数のソースから動作を継承する必要がある場合に使用される.PHPクラスは複数のインタフェースを継承できますが、複数の抽象クラスを拡張することはできません.
  • すべてのクラスが共通の動作実装を共有することを知っている場合は、抽象クラスを使用し、その動作を実装します.インタフェースで動作を実現できません.