目次
PHPのクラス
基本系
プロパティとメソッドにアクセス権を記載します。publicにすると他のクラスからもアクセスできます。※functionは省略可能で、省略すると自動でpublicになります。
1 2 3 4 5 6 7 8 9 10 |
class クラス名{//クラス名の頭文字は大文字 public $プロパティ名; //イニシャライザ。Swiftのinit()とほぼ同じ。 function __construct($プロパティ名){ $this->プロパティ名 = $プロパティ名; } public function メソッド名(){ print $this->プロパティ名; } } |
1 2 3 4 5 6 7 8 9 |
class クラス名 { public $score; function __construct($score) { $this->score = $score } public func upgrade() { $this->score++ } } |
アクセス権
public | アクセスの制限なし。 |
---|---|
protected | 現在のクラスと子クラスからアクセス可能。 |
private | 現在のクラスのみアクセス可能。 |
インスタンス化
1 |
$hogehoge = new クラス名(); |
1 2 3 4 5 6 7 |
//初期値を後から代入するパターン $hogehoge = new Classname(); $hogehoge->score = 10;//10を代入。scoreのとことに$マークが付かないので注意。 $hogehoge->upgrade();//メソッド実行 //初期値をインスタンス時に代入する場合 $hogehoge = new Classname(10);//scoreに10を代入 $hogehoge->upgrade();//メソッド実行 |
実行
1 2 3 4 |
$hogehoge->プロパティ = 代入値; $hogehoge->score = 10;//サンプル $hogehoge->メソッド(); $hogehoge->upgrade();//サンプル |
クラスの継承 extends
子クラスでイニシャライザ(コンストラクタ)を使わない場合
1 2 3 4 5 |
class 子クラス extends 親クラス{ public function 子クラスで追加するメソッド(){ print $this->親クラスのプロパティ名; } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
class 子クラス extends 親クラス{ public $子クラスで追加するプロパティ名; function __construct($親クラスのプロパティ名,$子クラスのプロパティ名名){ parent::__construct($親クラスのプロパティ); $this->子クラスのプロパティ名 = $子クラスのプロパティ名; } public function 子クラスで追加するメソッド(){ print $this->親クラスのプロパティ名; print $this->子クラスのプロパティ名; } //親クラスのメソッドを変更する場合。Swiftみたいにoverrideと記述せず、そのままでいい。 public function 親クラスのメソッド(){ 新しいメソッド内容; } } |
※swiftの場合は、extensionは継承ではなく、拡張で使われている。混同しやすいので注意。
interfaceとabstract
基本的には「swiftのプロトコル(protocol)と同じ」使い方で、プロトコル(親クラス)で定義したメソッドを子クラスで必ず実装しなくてはなりません。interfaceとabstractの違い
①interfaceは実装すべきメソッド名を宣言するだけでしかできないのに対し、abstractは実装すべきメソッド名だけでなく通常のクラスと同様のプロパティとメソッドを定義記述できます。 ②interfaceは、複数のinterfaceを子クラスに継承させることができるのに対し、abstractは、一つだけしか継承できません。 以下、個別にサンプルを記述します。interface
継承には「implements」を使います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
interface 親クラス1 { public function method1();//子クラスで必ず実装しなくてはならない。メソッドの中身は子クラスで記述。 } interface 親クラス2 { public function method2();//子クラスで必ず実装しなくてはならない。メソッドの中身は子クラスで記述。 } } class User implements 親クラス1, 親クラス2{//interfaceは複数継承できる。 public function method1(){ print 'インターフェース1'; } public function method2(){ print 'インターフェース2'; } } |
abstract
継承には「extends」を使います。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
abstract class 親クラス名{ public $score = 0; public function upgrade($score){ $score++; } abstract public function method1();//子クラスで必ず実装しなくてはならない。メソッドの中身は子クラスで記述。 } class 子クラス extends 親クラス名{ public function method1(){ print "abstractで実装を約束したmethod1です!" ; } } |