EdgePHPにおけるクラスの書き方と呼び出し方——インスタンス、メソッド、プロパティ:PHPオブジェクト指向プログラミング入門(1)「PHPで、どのようにオブジェクト指向プログラミングをしていくか」を解説する連載。初回は、「クラス」の書き方と簡単な使い方、メソッド/クラス定義内関数、プロパティ/クラス定義内変数、マルチプルインスタンスについて紹介します。本連載では、数回にわたって「PHPで、どのようにオブジェクト指向プログラミングをしていくか」を解説します。比較的「多くのオブジェクト指向プログラミングで共通していえる話」から「幾分、PHPに固有のお話」まで、ゆっくりと綴っていきたいと思います。「唯一の正解」なんてものはなかなか存在しないものですが、「こんな考え方もあるのか」ぐらいの感じで読んでいただければ幸いです。おおむね「PHPの基本文法は理解したけど、その次はどうしよう......」という人を読者に想定しています。合格した」(あるいは「合格できるだろう」くらいには勉強をした)というレベルの人です。関連連載Web業界で働くためのPHP入門そのようなレベルにある時期は、「で、オブジェクト指向っておいしいの?」などと疑問を持つ人も多いかと思います。そこで本連載では、オブジェクト指向プログラミングの「うまみ」ができるだけ分かりやすいよう、実務に沿って解説していければと思います。Programming:オブジェクト指向プログラミング)は分かるけど、PHPでのOOPは初めて」という人です。「OOPそのもの」の話ではPHPの書式を説明し、加えて「PHP固有の機能」もいくつか紹介していきますので、「こういう書き方ができるのか」「こんな機能があるのか」と楽しんでいただければと思います。オブジェクト指向プログラミング言語になってきた「PHP」まずは簡単に、PHPという言語についておさらいをしておきましょう。Tools」の略称でした。Tools」という部分は今でも色濃く残っていると思います。Interface」と言いました)を組むのに大変に便利なプログラミング言語です。5になってからは、ある程度オブジェクト指向言語としての機能も充実してきました。他言語と比較しても、「オブジェクト指向プログラミング」を行うのに、さほど困ることのない状況になってきたのではないか、と思います。何はともあれ、クラスの書き方および構成要素の基本を、おさらい程度にですが学んでいきましょう。読者の皆さんにとっては「ある程度、何となくは見覚えがある」くらいの感じだとは思うのですが。不安な方は、お手持ちの参考書や初心者本をあらためて確認してみるのもよいでしょう。クラスは、ものすごく大ざっぱに言うと「変数と関数の塊」です。疑似的にコードっぽいものを書くと、以下のようになります。}//$変数名1;$変数名2;}実際には「誰がその関数や変数にアクセスできるか?」を意味する「アクセス権(またはアクセス修飾子)」と呼ばれる、端的には「誰がその関数や変数にアクセスできるか?」を指定するので、以下のようになります。$変数名2;}実際には、アクセス権は複数あるのですが、その辺りは次回、詳しく説明しますので、今は一端「関数はpublicで、変数はprivateを足して書くのか」ぐらいに思っていてください。PHPのメソッド/クラス定義内関数、プロパティ/クラス定義内変数、インスタンス次の話をする前に、いくつか用語を整理していきましょう。上述した通り、まずは「クラス」を宣言します。「クラスを定義する」という言い方もあり、理解の段階では、これはとても分かりやすい語彙かと思いますので、できるだけ「クラスを定義する」「クラス定義」という単語を、本稿では使っていきます。クラス定義の中には、前述した通り「変数と関数」があります(実際には「定数」もありますがいったん置いておきます)。通常クラス定義内に書かれている関数のことを「メソッド(method)」、クラス定義内に書かれている変数のことを「プロパティ(property)」と呼びます。「クラス内変数」「クラス内関数」でも通じますが、多くの文章では「メソッド」「プロパティ」と書かれているので、覚えておくといいでしょう。クラスは「クラス定義を書いた」だけでは使えず、その後で、「new」という演算子を使って「インスタンス」と呼ばれるものを作る必要があります(例外もありますが、それは後ほど)。「インスタンス」は変数で保持可能な値の一つで、PHPでは「オブジェクト型」という型を持つ値です。実際に、インスタンスを作成して、var_dumpで表示をしてみましょう。hoge();var_dump($obj);「インスタンス」のことを「オブジェクト」と呼称することも多いですが、「オブジェクト」という単語は割と意味合いが広いので、本稿では基本的に、new演算子によって作られた「オブジェクト型の値」のことを「インスタンス」と呼称します。マルチプルインスタンス普段プログラムで使うのは、先ほど説明した「インスタンス」ですが、このインスタンスについて、もう少し確認してみましょう。先に結論を書くと、インスタンスは「クラス定義によって記述された、一塊のデータ」であるといえます。前提になるクラス定義を書いてきます。併せてインスタンスを一つ作り、そのインスタンスに値を入れてから、var_dumpで確認します。hoge();$obj->setValue(10);var_dump($obj);$this->、を使ってプロパティに値を入れたり出したりするのは、初心者向けコンテンツで確認してください。ちなみに、他言語ですと省略可能なものもありますが、PHPでは「明示的な記述が必須」です。対して、整数10を代入している」ということです。値を2回、setValueしてみましょう。hoge();$obj->setValue(10);var_dump($obj);$obj->setValue(20);var_dump($obj);当たり前ではありますが、上書きされるので2回目のvar_dumpでは「int(20)」が出力されてきます。それでは「別のインスタンスの値を書き換えた」ら、どうなるでしょうか。実際にコードを書いてみましょう。hoge();$obj2->setValue(20);var_dump($obj);var_dump($obj2);これを「不思議」ととらえる人も「当たり前」ととらえる人もいるかと思いますが、「$obj2」に対する変更は、「$obj」には全く反映されません。このように、各インスタンスは完全に「独立した」値として扱われます。「マルチプルインスタンス」なんていう言い方もありますが、これはオブジェクト指向プログラミングにとって「とても」重要な部分なので、しっかりと押さえておきましょう。今回は、オブジェクト指向プログラミングの最も基本的な部分について見てきました。この辺りは他のプログラミング言語のOOPでもほぼ「同じ」ところですね。「クラス定義」「インスタンス」、余裕があったら「マルチプルインスタンス」までを押さえていただければ、先に進むのが楽になるかと思います。次回も「他言語でも通用するOOPの話」です。具体的には「カプセル化」「アクセサー」「アクセス修飾子」「イミュータブルなオブジェクト」「コンストラクター」「デストラクター」などについて説明します。1970年浅草生まれ。1995年に富士通系のソフトハウスに就職しプログラマーに転身。いったエンジニア支援活動を独自に展開し、占い師時代の「ガルーダ」という占い師名にちなんだ「がる先生」の愛称で親しまれている。コンサルティングからシステム設計、ネットワークにセキュリティと、守備範囲は比較的多岐にわたる。PHPプログラミングを始めるための基礎知識とXAMPPのインストールオープンソースのWeb開発向けスクリプト言語「PHP」の文法を一から学ぶための入門連載。7.1含め2017年の情報に合うように対応、XAMPP環境構築を追記】。ソースをダウンロード今回からPHPのビルドとインストールに入ります。PHPという言語の概要と、ソースコードの入手法を解説します(編集部)理論編:PHPについて知ろうスクリプトを記述するだけの簡単なプログラミングで、Web対応の高速なデータベースアプリケーションを実現する手法としてPHPが急速に注目を集めている。データベースはオープンソースのPostgreSQLだけでなく、Oracleなどの商用データベースも扱える。ここでは、5月にバージョンアップしたばかりのPHP4によるWeb-DBシステム構築法を紹介しよう。X+PHPでオールインワン環境(インストール編):Mac内にPHP4、5、6を同居させるコツPHP4の開発は終了したが、移行の問題は残されている。vol.11」が開催された。今回のレポートでは、「自分をプログラミング言語に例える」というお題に答えた5人の技術者の回答をみていく。メールマガジンをご購読ください。申し込みページへITmediaはアイティメディア株式会社の登録商標です。