ホームページ >バックエンド開発 >PHPチュートリアル >PHP デザイン パターン (2): 抽象クラスとインターフェイス

PHP デザイン パターン (2): 抽象クラスとインターフェイス

WBOY
WBOYオリジナル
2016-06-23 13:12:591054ブラウズ

元のアドレス: PHP デザイン パターン (2): 抽象クラスとインターフェイス

はじめに

プログラミングにとって、物事の抽象化はありふれたトピックであり、抽象的な問題はオブジェクト指向プログラミングとプログラムにさらに役立ちます。デザインモデル。 C/C++、Java、Python、その他の言語と同様に、PHP もオブジェクト指向をサポートしますが、若干の違いがあります。たとえば、PHP はインターフェイスでの定数の定義をサポートしますが、抽象変数はサポートしません。

抽象化

物事の抽象化とは、2 つの異なる物事の間の本質的な特徴を区別することを指します。これら 2 つの物事は、特定の観点から明確な境界を持つ必要があります。

例えば、クジラとコイは、動物の観点からは明確な区別があり、異なる動物に属しますが、水生動物の観点からは、それらは同じ動物の抽象化に属します。

問題を適切に抽象化し、モデルを構築すると、プログラミングによる問題の解決が容易になります。

覚えておいてください: 抽象化は、問題を解決するためのプログラミングの基礎です。問題が複雑になるほど、コードを直接記述するのではなく、最初から問題を抽象化する必要があります。

抽象クラス/抽象クラス

抽象クラスは、PHP では抽象クラスと呼ばれるプログラミングの概念です。デザイン パターンでは、抽象クラスをインスタンス化/初期化することはできませんが、具象クラスからの継承に依存することで実現できます。なんだか抽象的ですよね?コードを使用して説明します。

<?phpabstract class Animal {  public $name;  abstract public function eat($food);}?>

は、動物の抽象クラスを定義します。動物の属性は名前であり、食べ物を食べるメソッドがあります。

Animal はなぜ抽象クラスなのでしょうか?なぜなら、動物種は自然界に存在するものではなく、人間の思考から抽象化されたものだからです。自然界に存在するのは、クジラやコイのような決定的な動物です。

たとえば、クジラの概念は動物に属し、Animal クラスを継承する必要があります。クジラ クラスと食べるメソッドを定義します。

<?phpclass Whale extends Animal {  public function __construct() {    $this->name = "Whale";  }  public function eat($food) {    echo $this->name . " eat " . $food . ".\n";  }}?>

これで、クジラ クラスを初期化し、食べるメソッドを呼び出すことができます。

<?php  $whale = new Whale();  $whale->eat("fish");?>

実行する :

$ php Whale.phpWhale eat fish.

インターフェース/インターフェース

PHP は、プロセス指向プログラミングの概念でインターフェースもサポートしています。以下もクジラの例を使用して説明します。

<?phpinterface IAction {  public function eat($food);  public function swim();}?>

上記を実装するためのクジラ クラスも定義します。インターフェイス:

<?phpclass Whale implements IAction {  public function eat($food) {    echo "Whale eat " . $food . "\n.";  }  public swim() {    echo "Whale is swimming.\n";  }}?>

これで、Whale クラスを初期化し、食べるメソッドを呼び出すことができます:

<?php  $whale = new Whale();  $whale->eat("fish");?>

それを実行します:

$ php Whale.phpWhale eat fish.

抽象クラスとインターフェイス

上記の抽象クラスとインターフェイスの例は似ていますか?実際、PHP プログラミングの場合、抽象クラスが実装できる関数はインターフェイスによって実装することもできます。

抽象クラスのインターフェイスの違いは、プログラミングの実装ではなく、プログラミングの設計パターンにあります。

一般的に言えば、抽象化はさまざまなことに使用され、インターフェースは物事の動作に使用されます。

例: 水生生物はクジラの抽象的な概念ですが、水生生物はクジラの行動ではなく、食べることはクジラの行動です。

大規模なプロジェクトの場合、オブジェクトは基本的な抽象クラスからの継承によって実装され、これらのクラスのメソッドは通常、インターフェイスによって定義されます。

さらに、物事の属性を変更する場合は、直接割り当てや他のメソッドの代わりにインターフェイスを使用することをお勧めします。次のようなものです:

<?phpinterface IAction {  public function eat();}class Whale implements IAction {  public function eat() {    echo "Whale eat fish.\n";  }}class Carp implements IAction {  public function eat() {    echo "Carp eat moss.\n";  }}class Observer {  public function __construct() {    $whale = new Whale();    $carp = new Carp();    $this->observeEat($whale);    $this->observeEat($carp);  }  function observeEat(IAction $animal) {    $animal->eat();  }}$observer = new observer();?>
実行します:

$ php Observer.phpWhale eat fish.Carp eat moss.

まとめ

良い設計パターンは厳密に抽象化することです問題は、抽象クラスとインターフェイスはプログラミング実装では似ていますが、プログラミング パターンでは異なります。

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