【PHP】クラス(class)の作成、インスタンス化(オブジェクト作成)

Pocket

>クラスの使い方について(目次ページ)

前回、「オブジェクト」とは『変数とメソッド(関数)が一つにまとめられたもの』、「オブジェクト指向」とは『情報をオブジェクト形で保持し、変更や処理に対し、対応しやすく設計』すること、そして「クラス(class)」とは『PHPに実装されている、オブジェクトの設計図作成機能』だということを学びました。
今回は実際にこの「クラス(class)」を作成してみたいと思います。

前回、画像の様なオブジェクトを作成しました。今回はこのオブジェクトを元に、クラスを作成していくわけですが、クラスの作成について理解するために、少しずつ段階を踏んで作成をしていきます。

 

クラスの作成を宣言する

上記コードのように「class 〇〇(任意のクラス名)」でクラス名を宣言し、「{}」内にクラスの項目を作成していきます。ちなみにクラス名の最初の一文字は大文字で記述するのが慣例らしいです。
今回作成したクラスには「プレイヤー名(name)」、「HP(hp)」、「MP(mp)」の管理項目を作成したいので、それぞれ「public $name;」、「public $hp;」、「public $mp;」という変数を宣言することでオブジェクトの管理項目を作成しています。
プログラム初心者の方には「public」の意味が分からないかと思いますが、これは「アクセス修飾子」と言って、クラス内の変数にどこからアクセスできるかを制御する為の構文です。これについてはまた別の機会にメモするということで、今は『クラス内で変数を作成したい時には、「アクセス修飾子 + 変数」を宣言する』と覚えておけば大丈夫です。
そしてこのクラス内に作成する変数のことを「メンバ変数」だったり、「インスタンス変数」、「プロパティ」と呼ばれているようです。個人的には「メンバ変数」って使うかな?

さて、実はこの段階でクラスの作成は一応できています。しかし学んだ通り、クラスとはあくまで「オブジェクトの設計図」です。この設計図を基に実際にオブジェクトを作成してみたいと思います。

 

オブジェクトの作成(インスタンス化)

それでは作成した「Player クラス」を元に、実際にオブジェクトを作成してみます。
作成の仕方はとっても簡単、「$変数  = new クラス名()」と宣言するだけです。
実際に見てみたほうが分かりやすいのでコードの下記の通りに変更してみましょう。

 

これで変数「$tanaka」に、「Player」クラスの情報を持ったオブジェクトができました。
すなわちこの「$tanaka」は「プレイヤー名(name)」、「HP(hp)」、「MP(mp)」の管理項目を持っていることになります。「print_r($tanaka)」で確認してみます。

class-step2-1

確認して分かるように変数「$tanaka」の中には、「Player Object」と「name」、「hp」、「mp」の項目ができています。
このように「new + クラス名( ) 」で実際にオブジェクトを作成することを、「インスタンス化」だったり「実在化」だったりと呼ばれているようです。「クラスという設計図を基に、実際にオブジェクトを作成するから実在化」という意味なんですね。
そしてこの実在化した変数一つを「インスタンスと呼びます。これから更に同じ管理項目を持ったたくさんの「インスタンス」ができますが、各々の「インスタンス」が持つ情報は違ってきます。「インスタンス」とは「同じ管理情報項目を持った一つの情報群」ということです。
「$tanaka」は「ゲームプレイヤーの1人で、名前は〇〇さん、HPは〇〇で、MPは〇〇」って考えればなんとなく分かるかも?
ちなみにこの「$tanaka」のように、クラスからオブジェクトを受け取る変数のことを「レシーバーオブジェクト」と呼ばれます。まあこれに関しては覚えなくていいような気がしますが。

 

まとめ

 

さて、これで一応クラスからインスタンス化まではできたのですが、肝心の各項目の値が空ですよね。
ここから手作業で入力していくようでは全然効率化になってません。
そこで次回はインスタンス化した時に、情報の初期値を持たせる機能、「コンストラクタ」について学びます。

 

  • クラス(class)の作成は「class + 任意のクラス名{ } 」で宣言する
  • オブジェクトの管理項目である、「メンバ変数」を「アクセス修飾子 + 変数」で宣言する
  • 実際にクラスからオブジェクトにするには「$〇〇 = new クラス名 () 」で行う。この動作を「インスタンス化」と呼び、作成したオブジェクトを「インスタンス」と呼ぶ

 

エッグ

シェアする

コメントを残す

メールアドレスが公開されることはありません。

コメントする