この記事の例では、PHP がクラス継承を使用してコードの重複の問題を解決する方法を説明します。皆さんの参考に共有してください。具体的な分析は次のとおりです:
継承とは、単にクラスに対して 1 つ以上のサブクラスを作成することを意味します。サブクラスを作成するには、クラス宣言で extends キーワードを使用する必要があります。最初に新しいクラス名が来て、その後に親クラス名が来ます。
次の例では、BookProduct と CDproduct という 2 つの新しいクラスを作成します。どちらも ShopProduct クラスを継承しています。
$base = "{$this->title}( {$this->プロデューサーメイン名},";
$base .= "{$this->プロデューサー名} )";
$base .= ":再生時間 - {$this->playLength} )";
$base を返します;
}
}
クラス BookProduct は ShopProduct を拡張します {
関数 getNumberOfPages(){
$this -> numPages を返します。
}
関数 getsummaryLine(){
$base .= "{$this->プロデューサー名} )";
$base .= ":ページ続き - {$this->numPages} )";
$base を返します;
}
}
?>
サブクラスはコンストラクターを定義しないため、BookProduct クラスと CDproduct クラスがインスタンス化されるときに、親クラス ShopProduct のコンストラクターが自動的に呼び出されます。
サブクラスは、デフォルトで親クラスのすべてのパブリックおよびプロテクトされたメソッドとプロパティを継承します (ただし、プライベート メソッドとプロパティは継承しません。これら 3 つのキーワードの機能については後で説明します)。つまり、getProducer() が ShopProduct クラスで定義されている場合でも、Cdproduct クラスからインスタンス化されたオブジェクトで getProducer() メソッドを呼び出すことができます。
コードをコピーします
コードは次のとおりです:
どちらのサブクラスも親クラスの共通部分を継承しますが、BookProduct クラスと Cdproduct クラスの両方が getsummaryLine() メソッドをオーバーライドし、独自の一意の実装を提供し、サブクラスが親クラスの関数を拡張および変更できることを示していることに注意してください。
しかし、親クラスでのこのメソッドの実装は少し冗長に思えます。その理由は、両方のサブクラスがこのメソッドをオーバーライドしますが、他のサブクラスがその基本機能を使用する可能性があるためです。このメソッドの存在により、クライアント コードの保証が提供されます。すべての ShopProduct オブジェクトには getsummaryLine() メソッドがあり、BookProduct と CDproduct の両方は、それぞれの getsummaryLine() メソッドを使用して $title プロパティにアクセスします。
おそらく最初は、継承は理解しにくい概念であると思います。まず、他のクラスを継承するクラスを定義することで、クラスがそのクラスの自由な機能と親クラスの機能を確実に持つことがわかります。次に、サブクラスの「検索」関数があります。$product2 -> getProducer() を呼び出すと、getProducer() メソッドが CdProduct クラスに見つからないため、ShopProduct クラスにこのメソッドがあるかどうかを確認します。そうでない場合は、それを呼び出します。そうでない場合は、エラーが報告されます。プロパティへのアクセスについても同様です。
ShopProduct のコンストラクターを見ると、基本クラス (親クラス) のサブクラスによって処理されるデータをまだ管理していることがわかります。BookProduct は $numPages パラメーターとプロパティを処理し、Cdproduct は $playLength パラメーターを処理する必要があります。プロパティ。これを実現するには、サブクラス内で個別にコンストラクターを定義する必要があります。
この記事で説明した内容が皆様の PHP プログラミング設計に役立つことを願っています。