オブジェクトの概要
オブジェクト
クラスは、オブジェクトを定義したもの。
オブジェクトは、クラスで定義し生成する。
インスタンスは、定義したクラスに基づいてnew演算子で生成したもの。
インスタンスはオブジェクトの構成要素となる。
コンストラクタ
オブジェクト指向プログラミング
オブジェクト指向プログラミング:Object-oriented programming:oop
プログラミングにおける対象をオブジェクト(もの)のように捉えること。
オブジェクト【object】
object : 物
オブジェクトとは
メソッド(関数)とプロパティ(変数)から構成されたもの。
オブジェクトはクラス・class(設計図)によって定義される。
クラス 【class】 定義・設計図・雛形
クラスの定義
クラスはオブジェクトを定義した設計図・雛形。
関係している変数と関数を1グループとして定義(設計図・雛形)。
関係する変数と関数を1グループとして関連付けすることにより、縛り(ルール)は増えるが、秩序を作ることができる。
この秩序があるおかげで後々デバックや管理において役立つ。
クラスに属する
変数 → プロパティ(クラス内で定義された変数)
関数 → メソッド(クラス内で処理を行う関数)
アクセス修飾子(public protected private)をプロパティとメソッドの前に記述する。
static 静的メソッド・静的プロパティ。
※静的メソッドの中では$thisは使用不可。
構文
class クラス名
{
//定数名の宣言
public $const 定数名 = ‘値’;
// プロパティの宣言
public $プロパティ名 = ‘値’;
// メソッドの宣言
public function メソッド名() {
実行処理内容;
}
//クラス自身のクラスプロパティ・スタティックプロパティ
public static const 定数名 = ‘値’;
public static $プロパティ = ‘値’;
//クラス自身のクラスメソッド・スタティックメソッド
public static function メッソド名(){
実行処理内容;
}
}
<?php //クラスの定義 Class CakeShop{ public $name; public $price; public $earnings; public function ear() { $answer=$this->price * $this->earnings; //現在のインスタンスを指す echo $answer; } } ?>
※$thisは現在のインスタンスを指す。
※静的メソッドの中では$thisは使用不可。
クラス内でアクセスした場合
クラスメンバーをクラス内で使用する場合
構文
self::$プロパティ名;
self::メソッド名();
クラス外からアクセスした場合
クラス外からクラスメンバーにアクセスする場合。
構文
クラス名::$プロパティ名;
クラス名::メソッド名();
メンバー
プロパティとメソッドをあわせてメンバーと言う。
クラスのプロパティとメソッドはクラスメンバーと言う。
インスタンスのプロパティとメソッドはインスタンスメンバーと言う。
アクセス修飾子
修飾子 | アクセス権 |
---|---|
public | どこからでもアクセス可能。 |
protected | 定義したクラスと継承したクラスからアクセス可能 |
private | 定義したクラス内のみでアクセス可能。 |
クラスの継承 inheritance
継承元のクラス:スーパークラス・親クラス・基底クラス。
継承をしたクラス:サブクラス・子クラス・派生クラス。
構文//親クラスのファイルを読み込み
require_once ‘親クラスファイル.php’;
class 子クラス extends 親クラス
{
}
メソッドのオーバーライド
子クラスにおいて親クラスのメソッドを加筆修正したい場合。
小クラスが優先され親クラスは上書きされる。
構文//親クラスのファイルを読み込み
require_once ‘親クラスファイル.php’;
class 子クラス extends 親クラス
{
public function 親にあるメソッド(){
paternt::親にあるメソッド();
処理内容
}
}
クラスの継承・オーバーライド禁止
クラスを継承及びオーバーライドさせたくない場合
構文final class クラス名
{
}
トレイト trait
trait : 特性
構文trait トレイト名{
public トレイトのプロパティ;
public function トレイとのメッソド{
}
}
親クラスを指定した場合
構文trait トレイト名extends 親クラス{
public トレイトのプロパティ;
public function トレイとのメッソド{
}
}
クラスでトレイトを利用する構文
構文class クラス名{
use トレイト名, トレイト名;
}
}
インターフェイス
ここでのインターフェイスの意味合い:規格
類義概念
API:Application Programming Interface
構文interface インターフェース名{
const 定数 = 値;
function 関数名()
構文interface 子インターフェース名 extend 親インターフェース{
const 定数=値;
function 関数名();
構文class クラス名 implements インターフェース名,インターフェース名{
}
構文class クラス名 extends 親クラス名 implements インターフェース名,インターフェース名{
}
抽象クラス・抽象メソッド
abstract function 抽象メソッド();
}
インスタンス【 instance 】
instance:実体
インスタンスはクラス(枠組み・設計図・雛形)に基づいて複製し生成したもの。
インスタンスの構成要素は、プロパティとメソッド。
クラスで定義したオブジェクトの一部分となる。
構文
インスタンスを格納する変数=new クラス名(引数,引数,,,)
プロパティの呼び出し
構文
インスタンス名-> プロパティ名;
※プロパティ名に$はつけない。
メソッドの呼び出し
構文
インスタンス名-> メソッド名();
アロー演算子 ->
クラスにおいてメソッド(関数)やプロパティ(変数)を参照するための演算子。
<?php //インスタンスの生成 $strawberry = new CakeShop(); $strawberry->name = "イチゴショート"; $strawberry->price = 500; $strawberry->earnings = 10; //プロパティとメソッドの呼び出し echo $strawberry->name; $strawberry->ear(); ?>
コンストラクタ【construct】
construct:構成体
働き
コンストラクタは、インスタンスを生成する時点で自動的に呼び出される特殊な関数。
クラスの定義の時点でプロパティの初期値の設定が不要な場合にコンストラクタを使用する。
インスタンス生成の時点でプロパティに初期値を設定する場合にコンストラクタを使用する。
※インスタンス生成時点でプロパティの初期値の設定が不要な場合は、コンストラクタは省略可能。
インスタンス化の際に実行される特別なメソッド。
重要:コンストラクタは初期化だけで、返り値を返す必要はなく返してはいけない。
構文
アクセス修飾子 function __construct(データ型 $変数名 , データ型 $変数名){
//インスタンスが生成された時点で一番最初に実行する処理
$this->変数名 = $変数名;
$this->変数名 = $変数名;
}
デストラクタ
オブジェクトを破棄するタイミングで実行する関数。
コード
<?php //クラスの定義 Class CakeShop{ public $name; public $price; public $earnings; public function ear() { $answer=$this->price * $this->earnings; //現在のインスタンスを指す echo $answer; } } //インスタンスの生成 $strawberry = new CakeShop(); $strawberry->name = "イチゴショート"; $strawberry->price = 500; $strawberry->earnings = 10; //プロパティとメソッドの呼び出し echo $strawberry->name; $strawberry->ear(); //インスタンスの生成 $marron = new CakeShop(); $marron->name = "マロンケーキ"; $marron->price = 400; $marron->earnings = 10; //プロパティとメソッドの呼び出し echo $marron->name; $marron->ear(); ?> <?php echo 'コンストラクタを使用した場合' ?> <?php //クラスの定義 Class CakeShop2{ public $name2; public $price2; public $earnings2; //コンストラクタの定義 public function __construct(int $price2, int $earnings2){ $this->price2 = $price2; $this->earnings2 = $earnings2; } //コンストラクタの定義終わり public function ear2() { $answer2=$this->price2 * $this->earnings2; //現在のインスタンスを指す echo $answer2; } } //インスタンスの生成 $strawberry2 = new CakeShop2(500,10); $strawberry2->name2 = "イチゴショート"; //プロパティとメソッドの呼び出し echo $strawberry2->name2; $strawberry2->ear2(); //インスタンスの生成 $marron2 = new CakeShop2(400,10); $marron2->name2 = "マロンケーキ"; //プロパティとメソッドの呼び出し echo $marron2->name2; $marron2->ear2(); ?>