/* class */
class taiyaki{
// private変数は外部から参照できない
private $sozai;
// メソッド
function setMenu($anko, $kizi){
// 自クラスのsozai変数へメソッド引数設定
$this->sozai = $anko.$kizi;
}
function getTaiyaki(){
// thisはインスタンス化されたクラスのデータを参照します。
return $this->sozai;
}
}
// クラス生成
// newでクラスのインスタンスを生成します。
$myTaiyaki = new taiyaki();
// メソッドを参照します。
$myTaiyaki->setMenu("anko", "kizi");
print($myTaiyaki->getTaiyaki());
print("<br/>");
ankokizi
class
クラスを定義する事が出来ます。
function
メソッドを定義します。()の中には引数を定義します。
new
クラスをインスタンス化します。生成とも呼びます。
ヒープ領域(自由に使えるデータ領域)に実態領域を作成します。最初は気にしなくて大丈夫です。
->
->(アロー)を使ってクラスの変数やメソッドを参照する事ができます。
継承
“extends”を使用する事によってクラスを継承する事が出来ます。
インスタンス化した際に継承したクラス(親クラス)を参照する事が出来ます。
extends
/* class */
class taiyaki{
// private変数は外部から参照できない
private $sozai;
// メソッド
function setMenu($anko, $kizi){
// 自クラスのsozai変数へメソッド引数設定
$this->sozai = $anko.$kizi;
}
// メソッド
function getTaiyaki(){
// sozai変数の中身を返す
return $this->sozai;
}
}
/* class (継承 extend) */
// taiyakiクラスを継承
class taiyakiOption extends taiyaki{
private $sp;
private $addSozai;
// コンストラクタはインスタンス時に自動で実行されます
function __construct(){
$sp = "cream";
}
function setSozai($sozai){
$this->addSozai = $sozai;
}
function addSp($sp){
$this->sp = $this->addSozai.$sp;
}
function getTaiyakiSp(){
// sp変数の中身を返す
return $this->sp;
}
}
// 継承クラス生成
// たいやきオプションクラス生成
$myTaiyakiSp = new taiyakiOption();
// 継承したクラスメソッドを参照
$myTaiyakiSp->setMenu("anko", "kizi");
$myTaiyakiSp->setSozai($myTaiyaki->getTaiyaki());
$myTaiyakiSp->addSp("cheese");
print($myTaiyakiSp->getTaiyakiSp());
print("<br/>");
ankokizi
extends
extendsを使用してクラスを継承します。継承したクラスのメソッドや変数を使用する事が出来ます。
ポイント
継承したクラスのメソッドを参照してる事が分かります。
$myTaiyakiSp->setMenu("anko", "kizi");
オーバーライド
オーバーライドとは親クラスのメソッドを子クラスが上書きする事です。
オーバーライド
/* Overwrite */
class testClass1{
public function testFunc(){
print("testA"."<br/>");
}
}
class testClassFinal{
final public function testFunc(){
print("testA"."<br/>");
}
}
class testClass2 extends testClass1{
public function testFunc(){
print("testB"."<br/>");
}
}
class testClass3 extends testClassFinal{
#public function testFunc(){
# print("testB");
# print("<br/>");
#}
}
$temp = new testClass2();
$temp->testFunc();
$temp = new testClass3();
$temp->testFunc();
testB
testA
final
オーバードライブを禁止します。実行すると以下のエラーが表示される。
Fatal error: Cannot override final method testClassFinal::testFunc()
抽象クラス(abstract)
抽象クラスは子クラスへ必ずメソッドを定義しなければなりません。
必要なメソッドをそろえないとエラーが発生します。
abstract
/* 抽象クラス(abstract) */
abstract class getClass{
protected $file;
function __construct($fileName){
$file = $fileName;
}
abstract public function get();
}
class myFile1 extends getClass{
public function get(){
print("myFile");
print($this->file."<br/>");
}
}
class myFile2 extends getClass{
public function get(){
print("file2"."<br/>");
}
}$myFile = new myFile1("JJ");
$myFile->get();
myFile
final
抽象クラスの変数は参照できません。
必要なメソッドをそろえないと以下のエラーが発生します。
Parse error: syntax error, unexpected 'print' (T_PRINT), expecting function (T_FUNCTION) or const (T_CONST)
インタフェース(interface)
インターフェイスはオブジェクト化できない為、実装クラスが必要となります。
抽象クラスとは違い、複数実装できます。実態の定義は出来ません。
interface
/* interface */
interface inputClass{
public function input($in);
}
interface outputClass{
public function output();
}
class myClass implements inputClass, outputClass{
public $inData = "";
public function input($in){
$this->inData = $in;
print($this->inData."<br/>");
}
public function output(){
print($this->inData."<br/>");
}
}
$myfile = new myClass();
$myfile->input("ABC");
$myfile->output();