ホームページ > バックエンド開発 > PHPの問題 > PHPコードの繰り返しが多すぎる場合の対処方法

PHPコードの繰り返しが多すぎる場合の対処方法

藏色散人
リリース: 2023-03-09 07:58:02
オリジナル
2241 人が閲覧しました

php でのコード重複が多すぎる問題の解決策: まず、BookProduct と Cdproduct という 2 つの新しいクラスを作成し、次にクラス継承を使用してコード重複の問題を解決します。

PHPコードの繰り返しが多すぎる場合の対処方法

#この記事の動作環境: Windows7 システム、PHP7.1 バージョン、DELL G3 コンピューター

php はクラス継承を使用して、コードの重複を解決する 質問

この記事では、コードの重複の問題を解決するための PHP でのクラス継承の使用法を主に紹介します。継承の原理と使用テクニックを例とともに分析しています。非常に実用的です。必要な友人は参照してください。

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

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

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

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

<?php
header(&#39;Content-type:text/html;charset=utf-8&#39;);
// 从这篇开始,类名首字母一律大写,规范写法
class ShopProduct{    // 声明类
 public $numPages;   // 声明属性
 public $playLenth;
 public $title;
 public $producerMainName;
 public $producerFirstName;
 public $price;
 function __construct($title,$firstName,$mainName,$price,$numPages=0,$playLenth=0){
  $this -> title = $title;    // 给属性 title 赋传进来的值
  $this -> producerFirstName= $firstName;
  $this -> producerMainName = $mainName;
  $this -> price= $price;
  $this -> numPages= $numPages;
  $this -> playLenth= $playLenth;
 }
 function getProducer(){    // 声明方法
  return "{$this -> producerFirstName }"."{$this -> producerMainName}";
 }
 function getSummaryLine(){
  $base = "{$this->title}( {$this->producerMainName},";
  $base .= "{$this->producerFirstName} )";
  return $base;
 }
}
class CdProduct extends ShopProduct {
 function getPlayLength(){
  return $this -> playLength;
 }
 function getSummaryLine(){
  $base = "{$this->title}( {$this->producerMainName},";
  $base .= "{$this->producerFirstName} )";
  $base .= ":playing time - {$this->playLength} )";
  return $base;
 }
}
class BookProduct extends ShopProduct {
 function getNumberOfPages(){
  return $this -> numPages;
 }
 function getSummaryLine(){
  $base = "{$this->title}( {$this->producerMainName},";
  $base .= "{$this->producerFirstName} )";
  $base .= ":page cont - {$this->numPages} )";
  return $base;
 }
}
?>
ログイン後にコピー

[推奨学習:

PHP ビデオ チュートリアル]

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

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

次のコードを上記に追加します。

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

$product2 = new CdProduct("PHP面向对象","郭","碗瓢盆",7,null,"7小时");
print "美好生活:{$product2 -> getProducer()}<br>";
// 结果是:美好生活:郭碗瓢盆
ログイン後にコピー

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

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

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

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

以上がPHPコードの繰り返しが多すぎる場合の対処方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
php
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート