クラス継承とサブクラス
#11 クラスを継承してみよう
http://dotinstall.com/lessons/basic_php_advanced/6911
を参考に
PHPでの継承とサブクラスについて学習
クラスをつくり、拡張したいときには
継承を使う
これは extends すればいい
例えば、
class User を継承して
SuperUser というクラスを作りたいのなら
class UperUser extends user{}
とする
ちなみに、継承すると
User で定義した
メンバー変数とかユーザ関数も使えるし
さらに書き換えて別の機能を実装することもできる
これが継承というもの
PHP以外にも java とかで使われる機能
あとは、クラスの中に新しい関数を用意してみた
public function superSayHi(){
echo “URyyyyyyyyyyyyyyyy !”;
}
そして
あとは実体化するため
$bob = new superUser(“bob”,”dummy@dummybob.com”);
とする
クラスは設計図
new でこのようにかくことで実体化させることができる
superUser クラスで
User クラスと同じ構造で実体化できるのは
継承により
public function __construct($name, $email) {
$this->name = $name;
$this->email = $email;
}
も受け継いでいるため
再度 コンストラクタを書く必要性がない
あとは
$bob->superSayHi();
とすれば
Uryyyyyyyyyyyyy!
と表示される
あと、継承に関しては
public
private
の他に
protected が存在する
protected で宣言したメンバー変数などは
定義したクラスや
それを継承してできたサブクラス(継承して拡張したクラスなど)
でも使える
private との違いは
private だと
作成したクラスではアクセスできるけど
これを元に作成したサブクラスでは作った変数とかが使えないというようになる
ためしに、
class User {}
の中になる
public $email;
を
protected $email;
と変更して
class SuperUser extends User{}
の中の
echo の部分を
public function superSayHi(){
echo “URyyyyyyyyyyyyyyyy !”;
}
から
public function superSayHi(){
echo ” URyyyyyyyyyyyyy!!! \n my email is “.$this->email;
}
と変更すると
URyyyyyyyyyyyyy!!! my email is dummy@dummybob.com
となり
. で連結した文字部分の
$this->email;
が表示できているのがわかる
もし、
protected ではなく private にするとエラーになる
アクセス可能な領域により使い分けることになる