ホームページ >バックエンド開発 >PHPチュートリアル >PHP はクラス継承を使用してコードの重複の問題を解決します_PHP チュートリアル

PHP はクラス継承を使用してコードの重複の問題を解決します_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:07:041263ブラウズ

php はコードの重複の問題を解決するためにクラスの継承を使用します

この記事では主に、コードの重複の問題を解決するために php でのクラスの継承の使用方法を紹介し、例とともに継承の原理と使用テクニックを分析します。困っている友達は参考にしてください。

この記事の例では、PHP がクラス継承を使用してコードの重複の問題を解決する方法を説明します。参考のためにみんなで共有してください。具体的な分析は次のとおりです:

継承とは、単にクラスに対して 1 つ以上のサブクラスを作成することを意味します。サブクラスを作成するには、クラス宣言で extends キーワードを使用する必要があります。最初に新しいクラス名が来て、その後に親クラス名が来ます。


次の例では、BookProduct と CDproduct という 2 つの新しいクラスを作成します。どちらも ShopProduct クラスを継承しています。

コードは次のとおりです:

header('Content-type:text/html;charset=utf-8');
// この記事からクラス名の頭文字を大文字にし、書き方を統一しました
class ShopProduct{ // クラスを宣言します
public $numPages; // プロパティを宣言します
パブリック $playLenth;
公開 $title; パブリック $プロデューサーメイン名;
パブリック $プロデューサー名;
公開価格;
function __construct($title,$firstName,$mainName,$price,$numPages=0,$playLenth=0){
$this -> title = $title; // 渡された値を title 属性に代入します。 $this -> プロデューサー名= $名; $this -> プロデューサーメイン名 = $メイン名; $this -> 価格 = $価格
$this -> numPages= $numPages; $this ->playLenth= $playLenth; }
function getProducer(){ //宣言メソッド
return "{$this -> プロデューサー名 }"."{$this -> プロデューサーメイン名}";
}
関数 getsummaryLine(){
$base = "{$this->title}( {$this->プロデューサーメイン名},";
$base .= "{$this->プロデューサー名} )";
$base を返します;
}
}


クラス CdProduct は ShopProduct を拡張します {
関数 getPlayLength(){
$this を返す -> playLength;
}
関数 getsummaryLine(){

$base = "{$this->title}( {$this->プロデューサーメイン名},";

$base .= "{$this->プロデューサー名} )";

$base .= ":再生時間 - {$this->playLength} )";
$base を返します;
}
}

クラス BookProduct は ShopProduct を拡張します {
関数 getNumberOfPages(){
$this -> numPages を返します;
}
関数 getsummaryLine(){
$base = "{$this->title}( {$this->プロデューサーメイン名},";

$base .= "{$this->プロデューサー名} )";

$base .= ":ページ続き - {$this->numPages} )";
$base を返します;
}
}
?>



サブクラスはコンストラクターを定義しないため、BookProduct クラスと CDproduct クラスがインスタンス化されるときに、親クラス ShopProduct のコンストラクターが自動的に呼び出されます。


サブクラスは、デフォルトで親クラスのすべてのパブリックおよびプロテクトされたメソッドとプロパティを継承します (ただし、プライベート メソッドとプロパティは継承しません。これら 3 つのキーワードの機能については後で説明します)。つまり、getProducer() が ShopProduct クラスで定義されている場合でも、Cdproduct クラスからインスタンス化されたオブジェクトで getProducer() メソッドを呼び出すことができます。

次のコードを追加します:

コードは次のとおりです:

$product2 = new CdProduct("PHP オブジェクト指向","Guo","ボウルとパン",7,null,"7 時間");

print "良い生活: {$product2 -> getProducer()}
";
// 結果は次のようになります: 良い生活: Guo のボウルと鍋

どちらのサブクラスも親クラスの共通部分を継承しますが、BookProduct クラスと Cdproduct クラスの両方が getsummaryLine() メソッドをオーバーライドし、独自の一意の実装を提供し、サブクラスが親クラスの関数を拡張および変更できることを示していることに注意してください。

しかし、親クラスでのこのメソッドの実装は少し冗長に思えます。その理由は、両方のサブクラスがこのメソッドをオーバーライドしますが、他のサブクラスがその基本機能を使用する可能性があるためです。このメソッドの存在により、クライアント コードの保証が提供されます。すべての ShopProduct オブジェクトには getsummaryLine() メソッドがあり、BookProduct と CDproduct の両方は、それぞれの getsummaryLine() メソッドを使用して $title プロパティにアクセスします。

おそらく最初は、継承は理解しにくい概念であると思います。まず、他のクラスを継承するクラスを定義することで、クラスがそのクラスの自由な機能と親クラスの機能を確実に持つことがわかります。次に、サブクラスの「検索」関数があります。$product2 -> getProducer() を呼び出すと、getProducer() メソッドが CdProduct クラスに見つからないため、ShopProduct クラスにこのメソッドがあるかどうかを確認します。そうでない場合は、それを呼び出します。そうでない場合は、エラーが報告されます。プロパティへのアクセスについても同様です。

ShopProduct のコンストラクターを見ると、基本クラス (親クラス) のサブクラスによって処理されるデータをまだ管理していることがわかります。BookProduct は $numPages パラメーターとプロパティを処理し、Cdproduct は $playLength パラメーターを処理する必要があります。プロパティ。これを実現するには、サブクラス内で個別にコンストラクターを定義する必要があります。

この記事で説明した内容が皆様の PHP プログラミング設計に役立つことを願っています。

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/956987.html技術記事 PHP はコードの重複の問題を解決するためにクラスの継承を使用します。この記事では、コードの重複の問題を解決するためにクラスの継承を使用する PHP を主に紹介します。これは非常に実践的です。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。