PHP学習3日目

昨日は一体どこまで書いたんだろうか。クラスとかインスタンスの事書いた気がする。とりあえず継承とかオーバーライドについて書こう。

指定していたクラスの他にクラスが必要になったときに、元のクラスを親クラス、新しいクラスを子クラスとして継承することができる。分からないとは思うけど、そういうのがあるんですよ。

クラスの指定はこう

class Item{
protected $name;
protected $price; 
}

クラスの継承はこう

class Weapon extends Item{
private $str;
}
class Armor extends Item{
private $def;
}

これはもしアイテムが2つあったときに、両方アイテムだけど片方が武器で片方が装備だと、持たせたい情報が違うからアイテムから分岐させる。これが継承。

オーバーライド

さらに継承させるときに子クラスで親クラスのプロパティ名やメソッド名を上書きすることができる。そのことをオーバーライドと呼ぶ。

class Item{

public $name;
public $price;

public function __construct($name,$price){
$this->name = $name;
$this->price = $price;

}

class Weapon extends Item {

public $str;

public function __construct($name,$price,$str){
parent:: __construct($name,$price);
$this->str = $str;

}

}

こんな感じで親のプロパティやメソッドをそのまま持ってきつつ+そのクラスの特徴を持たせることができる。これがオーバーライド。

ついでだから抽象クラスとインターフェースも。抽象クラスというのは継承をさせるためだけに作るクラスのことで抽象クラスをインスタンス化することは出来ない。abstractを付けて指定するだけ。ちなみにメソッドにもabstractを付けることが出来て、その場合は必ず子クラスそのメソッドを実装してくれという意味になるらしい。使ったことないから、、らしい。

abstract class Item{

public $name;

abstract public function attack();

}

class Weapon extends Item{

public function attack(){
echo "攻撃した";
}

}

最後にインターフェース。めっっっちゃ眠い。

インターフェースはこのクラスで定義したメソッドを絶対に使え!というものでございます。抽象と変わらんやんと思うけど違う、抽象はabstractで指定したメソッド以外のメソッドやプロパティを指定することが出来るけど、インターフェースはインターフェースメソッドしか定義できない。ちなみに抽象クラスは1つにしか継承できないらしいけどインターフェースは複数に継承することが可能なのも違う点。

interface Attack{
public function attack();
}

interface superAttack{
public function superAttack();
}

class Weapon implement Attack, superAttack{
public function attack();
echo "攻撃した";

public function superAttack();
echo "必殺技";

}

こんな感じ。

あ、あと今日は開発環境のmanpをインストールしたよ。

寝る!