Developer

【PHP応用】クラス オブジェクト インスタンス化
2021.03.31
Lv2

【PHP応用】クラス オブジェクト インスタンス化

この記事で説明するのは以下の3つです。
1. オブジェクトはクラスをインスタンス化したもの。
2. オブジェクトはプロパティ(変数、属性)と、メソッド(関数、操作)をもつ。
3.「new クラス名」でインスタンス化。

クラス、オブジェクト、インスタンス化とは

前節でも出てきたとおりですが、少し角度を変えて改めて説明してみましょう。

オブジェクト指向において、ほとんどの処理は関数内に記述されます。
そして、ほとんどの関数は「オブジェクト」に属します。
「オブジェクト」は「関数(メソッド)」と「変数(プロパティ)」が
指定されている処理の塊(ブロック)です。

ですので、何か処理を実行するには
「あるオブジェクトのある関数」を呼び出す必要があります。
それを繰り返し、連鎖させることで、様々な処理が実装できます。

いくつかのオブジェクトは似通ったものもありますし、
全く同じ処理をもつ関数を実装しているものもあります。
そういったオブジェクトの特長をまとめて抽出した定義が、「クラス」です。

「クラス」とは概念に近いものです。
例えとして、我々一人一人をオブジェクトとして考えてみましょう。
一人一人違った「身長」や「体重」や「名前」といった属性(プロパティ)をもち、
「走る」「寝る」「食べる」といった操作(メソッド)をもっています。
そんな一人一人の特長をまとめて定義したものが「人間」という概念です。

つまり「たろうさん」というオブジェクト(実体)は、
「人間」という概念(クラス)にまとめることができるわけです。

逆に言うと、オブジェクトはクラスという定義を実体化したもので、
プログラミングにおいて、実体化をしなければ
オブジェクトの関数を呼び出すことはできません。
この実体化を「インスタンス化」と言い、「new」演算子を用いて行います。
インスタンス化したオブジェクトのことを「インスタンス」とも言います。

クラス、オブジェクト、インスタンス化の関係をしっかりと把握しておいてください。

クラス、インスタンス化の構文

では、クラスとインスタンス化の構文を覚えましょう。

クラスの構文
class クラス名{
/* クラス定義 */
}
※これが基本の形です。これに様々な演算子やキーワードが付加されることもあります。

インスタンス化の構文
オブジェクト変数 = new クラス名;
オブジェクト変数 = new クラス名();
※これが基本の形です。これに引数が付加されることもあります。

クラス、インスタンス化の例

クラスをインスタンス化し、オブジェクトを生成するサンプルを作成してみましょう。
例1

	
class Sample1_2_1{
    public $a;
    public $b;
}
$s = new Sample1_2_1;    //←インスタンス化
var_dump($s);

★どのような結果になるか試してみましょう。

→以下のような結果になります。
object(Sample1_2_1)[1] public ‘a’ => null
public ‘b’ => null

「Sample1_2_1」型のオブジェクト(object)で、
プロパティ「a」と「b」の値は「null」、という状態です。
クラスをインスタンス化すると
オブジェクトが生成されていることがわかります。

補足:「public」の記述について

プロパティ定義の前に「public」とついているのに気づきましたか?
これはアクセス修飾子と呼ばれるもので、
このメンバへのアクセス制限を設定するものです。
これに関しては後述するので、ひとまず「public」をつけておきましょう。

補足:「var_dump」関数について

var_dump関数は、引数の変数の型、サイズ、データ等を
詳細に表示してくれます。
スカラー変数だけでなく、
オブジェクト変数も引数にとることができます。
 

補足:変数を使ってクラスを参照することができる。

クラス名を文字列にしたうえで、呼び出すことが可能です。
他言語では、リフレクションとして知られている機能が、
PHPではより簡単に実現できます。
例1修正版

class Sample1_2_1{
    ~中略~
}
$className = “Sample1_2_1”;
$s = new $className();

PHPWEBプログラミング講座 連載目次リンク

PHPWEBプログラミング講座 連載目次

関連記事

【Python連載】クラスの定義とオブジェクトの生成
Pythonでのインスタンス化の記事です
【はじめてのJava】インスタンス【オブジェクトとクラス編】
Javaでのインスタンス化の記事です