PHPの「クラス」と「インスタンス」――「オブジェクト指向」の基礎中の基礎:Web業界で働くためのPHP入門(13)(2/3 ページ)
オープンソースのWeb開発向けスクリプト言語「PHP」の文法を一から学ぶための入門連載。今回からしばらく、PHPの「オブジェクト指向言語」としての書き方を紹介します。今回は、その1回目として基礎中の基礎である「クラス」と「インスタンス」を扱います。
クラスとインスタンスの関係はクッキーの型とクッキー
ここまでクラスの使い方を説明しましたが、ここで説明したのはあくまで使い方です。では、そもそもどういう処理を行っているのでしょうか。ここではそのイメージをつかんでもらおうと思います。図1を見てください。
クラスというのはクッキーの型のようなものです。そして、この型で生地をくり抜いてオーブンで焼く作業、つまりクッキーそのものを生成するのが「new」というキーワードで、焼きあがったクッキーそのものがインスタンスです。ここで大切なのは、焼き上がったクッキーは皆、同じ形をしています。しかし、それぞれが全く別のものであるということです。同様に、インスタンスもクラスを基に生成されるので同じようなものに見えますが、それぞれが全く別のものなのです。
リスト4では11行目で「new TestScore()」とすることでTestScore型のクッキー、つまりインスタンスが生成され、それを$taroで表しています。同様に、18行目で生成されたインスタンスは同じTestScore型ですが、$taroとは全く別のものであり、それを$hanakoで表しています。
このように同じ形でありながら、全く別のものとして扱えるので、それぞれにたろうさんのデータ、はなこさんのデータという別々のデータを保持できるのです。
コラム「参照変数」
ここでは、クラスとインスタンスの関係を、クッキーの型とクッキーのたとえで説明してきました。では、型でくり抜く対象、つまりクッキーの生地に当たるものは何でしょうか。それは、メモリです。クラスをnewする際、コンピュータ内部では必要量のメモリが確保されます。メモリが型でくり抜かれているのです。これがインスタンスの実体です。
そして、その確保されたメモリ分全てが変数、例えば、$taroに格納されているわけではありません。実際に$taroに格納されるのは、インスタンスとして確保されたメモリの位置情報のみです。このように、メモリの位置情報のみを格納した変数を「参照変数」といいます。インスタンスを表す変数は全て参照変数です。
関数とのやりとりをクラス型にする
リスト4では、クラスを使い、データをまとめて扱えるようになりました。ところが、いまひとつまとまった感じがしません。それは、関数printScore()へのデータの渡し方に問題があります。リスト4ではせっかく各データをインスタンス内にまとめて格納したのにもかかわらず、もう一度そこから取り出して関数printScore()に渡しています。
せっかくデータをまとめるインスタンスがあるので、関数にはこれをそのまま渡して処理してほしいところです。
リスト4をそのように改良した以下のuseTestScore2.phpを作成し、実行してください。
<?php require_once("TestScore.php"); function printScore(TestScore $student): void { $sum = $student->math + $student->english + $student->japanese; $ave = $sum / 3; print($student->name."さんの合計: ".$sum." 平均: ".$ave."<br>"); } $taro = new TestScore(); $taro->name = "たろう"; $taro->math = 87; $taro->english = 92; $taro->japanese = 74; printScore($taro); $hanako = new TestScore(); $hanako->name = "はなこ"; $hanako->math = 95; $hanako->english = 79; $hanako->japanese = 83; printScore($hanako);
実行結果はリスト1と同じです。
大きく変わったところは、関数printScore()の引数がTestScore型1つになったところです。それに伴って、関数内で引数のインスタンス内から各データを「$student->math」のように取得しています(6行目)。また、16行目や23行目のように、関数を利用するところではデータが格納されたインスタンスをそのまま渡しています。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- WordPress活用に欠かせない、PHPをWindowsにダウンロードしてインストール、アンインストールする
本連載では、さまざまなソフトウェアのインストール、実行するためのセットアップ設定、実行確認、アンインストールの手順を解説する。今回は、PHPとは何か、PHPで動くツールの紹介、PHPのインストールとアンインストールについて解説。PHPプログラミングを始める参考にしてほしい。 - PHPにおけるクラスの書き方と呼び出し方――インスタンス、メソッド、プロパティ
「PHPで、どのようにオブジェクト指向プログラミングをしていくか」を解説する連載。初回は、「クラス」の書き方と簡単な使い方、メソッド/クラス定義内関数、プロパティ/クラス定義内変数、マルチプルインスタンスについて紹介します。 - PHP(スクリプト言語)
PHPは、HTMLへの埋め込みが可能なスクリプト言語(およびその処理系)。主としてWebアプリ開発に使用される。