カテゴリー:
クラスとオブジェクト
閲覧数:847 配信日:2013-04-06 16:28
クラスを定義しただけ
継承したクラス定義
・単に継承したクラスを定義しただけで何の機能も持たないクラス
class Oya{//通常のクラス
}
class Ko extends Oya{//通常のクラスと違い、クラス名の後に「extends 継承元のクラス名」を付与。当然、継承元のクラスが既に存在する必要がある
}
//処理結果
//単に継承したクラスを定義しただけなので、結果には何も表示されない
ゲッター
・Koクラスには、priceプロパティは存在しないように見えるが、Oyaクラスを継承しているため、priceプロパティ100は存在している
・より正確には、Oyaクラスのpriceプロパティを参照して生成されたKoインスタンスオブジェクトのプロパティとして存在している
※クラスに所属しているプロパティではないことに注意が必要
class Oya{
protected $price="100";
}
class Ko extends Oya{
public function getPrice(){ // ゲッター
return $this->price;
}
}
$ko = new Ko();//インスタンスオブジェクトを生成
echo '子クラスインスタンスオブジェクトのプロパティ' . $ko->getPrice();
//処理結果
//子クラスインスタンスオブジェクトのプロパティ100
一般例
継承例
・Productの機能は全て持った上で新しい機能を持たせたBookProductというクラスを作成
class Product{//Productクラスには商品名と価格のフィールドが存在し、価格用のセッタとゲッタが存在
protected $name; // 商品名
protected $price; // 価格
public function __construct($price){ // コンストラクタ
$this->price = $price;
}
public function getPrice(){ // ゲッタ。価格を取得
return $this->price;
}
public function setPrice($price){ // セッタ。価格を設定
$this->price = $price;
}
}
class BookProduct extends Product{//ネット価格用プロパティとそのゲッタ・セッタを設定。見た目上、BookProductにはnetpriceしか存在しないように見えるが、Productクラスを継承しているため、nameやpriceなども BooKProductのメンバとなる。
private $netprice; // ネット価格
public function setNetprice($netprice){
$this->netprice = $netprice;
}
public function getNetprice(){
return $this->netprice;
}
}
$book = new BookProduct(200);
echo '販売予定価格を' . $book->getPrice() . '円に設定しました。';
$book->setPrice(100);
echo '実際の販売価格を' . $book->getPrice() . '円に設定しました。';
$book->setNetprice(90);
echo 'ネット価格を' . $book->getNetprice() . '円に設定しました。';
//処理結果
//販売予定価格を200円に設定しました。実際の販売価格を100円に設定しました。ネット価格を90円に設定しました。