PHP はコンストラクター メソッドを呼び出す親と親クラスのオーバーライドされたメソッドを実装します_PHP チュートリアル

WBOY
リリース: 2016-07-13 10:07:02
オリジナル
829 人が閲覧しました

phpは親クラスのコンストラクターとオーバーライドされたメソッドを呼び出す親を実装します

この記事では主に親クラスのコンストラクターとオーバーライドされたメソッドを呼び出す親を実装するphpを紹介します 前回の記事では、クラス継承を使用してコードを解決しました。度重なる質問をもとに、親クラスの構築メソッドを呼び出して上書きする関連手法をさらに分析し、必要な友人が参照できるようにしました

この記事の例では、PHP が親を実装して、親クラスのコンストラクター メソッドとオーバーライドされたメソッドを呼び出す方法を説明します。皆さんの参考に共有してください。具体的な分析は次のとおりです:

上書き: 再設計されます。

サブクラスでコンストラクターを定義するときは、親クラスのコンストラクターにパラメーターを渡す必要があります。そうしないと、不完全に構築されたオブジェクトが取得される可能性があります。

親クラスのメソッドを呼び出すには、まずクラス自体を参照する方法を見つける必要があります。PHP は、このための親キーワードを提供します。

親は親クラスのコンストラクターを呼び出します

オブジェクトではなくクラスのメソッドを参照するには、-> の代わりに :: (2 つのコロン) を使用します。

つまり、parent::__construct() は、親クラスの __construct() メソッドを呼び出すことを意味します。

前の記事「クラス継承を使用してコードの重複やその他の問題を解決する」のコードを変更して、各クラスが独自のデータのみを処理するようにします。

コードをコピーします。コードは次のとおりです:

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

?>


各サブクラスは、独自のプロパティを設定する前に、親クラスのコンストラクターを呼び出します。基本クラス (親クラス) は自身のデータのみを知っているため、サブクラスに関する情報を親クラスに伝えないようにする必要があります。これは、特定のサブクラスの情報を「」にする必要があるかどうかを考えてください。 confidential" の場合、その結果、親クラスはその情報を知っており、他のサブクラスはその情報を継承できるため、サブクラスの情報は機密に保たれません。

親は親クラスのオーバーライドされたメソッドを呼び出します

parent キーワードは、親クラスをオーバーライドする任意のメソッドで使用できます。親クラスのメソッドをオーバーライドするときは、親クラスの関数を削除するのではなく、現在のオブジェクトで親クラスのメソッドを呼び出すことで拡張できます。

上記のコードを見ると、2 つのサブクラスの getsummaryLine() メソッドで多くのコードが繰り返されていることがわかります。冗長な開発ではなく、ShopProduct クラスにすでに存在する機能を利用する必要があります。

コードをコピーします。コードは次のとおりです:

// 親クラス: ShopProduct
関数 getsummaryLine(){
$base = "{$this->title}( {$this->プロデューサーメイン名},";
$base .= "{$this->プロデューサー名} )";
$base を返します;
}
// サブクラス: CdProduct
関数 getsummaryLine(){
$base = 親::getsummaryLine();
$base .= ":再生時間 - {$this->playLength} )";
$base を返します;
}
// サブクラス: BookProduct
関数 getsummaryLine(){
$base = 親::getsummaryLine();
$base .= ":ページ続き - {$this->numPages} )";
$base を返します;
}

親クラス ShopProduct の getsummaryLine() メソッドの「コア」関数が完成しました。次に、サブクラスで親クラスのメソッドを呼び出し、概要文字列にデータを追加するだけで、メソッドの拡張が実現します。

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

www.bkjia.com本当http://www.bkjia.com/PHPjc/956988.html技術記事 PHPは親クラスのコンストラクタとオーバーライドされたメソッドを呼び出す親を実装する 前回の記事ではクラスの使い方について...
を中心に紹介します。
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート