オブジェクト指向でPHPをさらに使いこなすPHPでのオブジェクト指向とは?PHPの開発でよく耳にする「オブジェクト指向」。このオブジェクト指向の意味が分かっていない状況では、PHPのプログラミングの理解も進みません。そのため、まずは、「PHPでなぜオブジェクト指向が必要とされているのか?」また「オブジェクト指向を理解するにあたり何から理解すると良いのか?」から解説していきたいと思います。クラスを中心とした概念で構成されるオブジェクト指向は、クラスと呼ばれる概念で構成される考え方です。PHPで記述したクラスを作成し、それを用いてオブジェクト(=モノ)を作成するプログラミング法です。クラスについて例えると、「設計書」とよく言われています。オブジェクト指向で最初に覚えるべき4つのキーワードオブジェクト指向を理解するにあたり、最初に覚えるべき4つのキーワードがあります。クラスメソッドプロパティインスタンスオブジェクト指向には、色々なキーワードが出てきますが、PHPでオブジェクト指向を理解するにあたり最初は、この4つで十分です。クラスクラスは、オブジェクトを作るためのテンプレートとなるものです。クラスの中には、変数や関数などが含まれています。テンプレートであるクラスを利用して、後ほどご説明するオブジェクトを作成していきます。(ガンダムを例に)クラスを作ってみよう!今回は、メディア編集部の独断で、「ガンダム」を例に説明していきます(笑)ガンダム(モビルスーツ)には多くの種類がありますよね。「ザクII」や「デスティニーガンダム」などたくさんいます。それぞれのガンダムを1体1体実装するのも良いですが、これはスマートではありません。そこで、共通して最低限必要な持つ機能や特性、例えば機能は「歩く」「しゃがむ」、特性は「名前」「大きさ」「重量」などは、まとめてしまいましょう。これがクラスの考え方です。歩く、しゃがむ、攻撃するかなりシンプルですが、このようにまとめることができます。このとき、「共通して持つ特徴」と例えている部分を、メンバ変数(またはプロパティ、インスタンス変数)と呼びます。「共通して持つ機能」と例えている部分を、メンバ関数(またはメソッド)と呼びます。攻撃する}のように書けます。オブジェクト指向にとって重要な要素です。意味は後ほど説明します。メソッドクラスの中で定義された「関数」のことをメソッドと呼びます。上記コードで言うと、ここの部分です。攻撃するいわゆる作ったモノ(オブジェクト)に対する命令文です。基本的な動きは、PHPで定義されるその他の関数と同じであると理解して問題ありません。中に何かしらの行動を定義することができます。メソッドが存在することで引数によって計算結果が変わるなど同じクラスから生まれたものでも、異なった結果を生み出せるようになります。付いているのは、クラス外からこれらの関数を呼び出せる、というのを示しています。プロパティクラスの中で定義された「変数」のことをプロパティと呼びます。上記コードで言うと、この部分です。$color;クラスの中で定義されている場合のみ、プロパティと独自の名前がついています。変数ですので、基本的には皆さんがイメージするとおりで、クラスの中で動的に変更される数値などを扱います。プロパティがあることで、クラス内で様々な変数を管理できます。これは、クラス内でしか操作できないもの、を指します。外側からはこれらの変数に触ることはできません。今の段階ではイメージがつきにくいかもしれませんが、このまま読み進めていくと理解できると思います。インスタンス設計図にあたるクラスを利用して、実際に「オブジェクト」を作成したものをインスタンスと呼びます。インスタンスを作成することで、具体的にPHPで様々な作業をオブジェクトに任せられるようになります。コンストラクタインスタンスを作成する方法を学ぶ前に、コンストラクタについて理解しておく必要があります。コンストラクタとは、インスタンスが生成されたときに一番最初に呼び出される関数です。このとき、必要な引数を定義して、メンバ変数(プロパティ)を初期化したりします。$color;}のように書くのが望ましいです。ポインタをつけてアクセスします。具体的にオブジェクトを作成する方法を確認していきましょう。オブジェクトを作成する場合、以下のように新しいオブジェクトを作成します。このように、インスタンス生成時にコンストラクタの引数を与えます。Gundom();のように書けます。他のオブジェクトも作成してみる今、作ったガンダムクラスをもとに別のガンダムを生成することもできます。White");これで、別のガンダムが生成されました。このように、同じクラスをもとに別の特徴と同じ機能を持ったモノ(オブジェクト)が生成されます。これがオブジェクト指向の基本的な考え方なのです。作成したオブジェクトに命令させる最初に、メソッドをいくつか作りました。それらは、オブジェクト(インスタンス)が生成されて初めて、以下のように扱うことができます。$zaku_ii->squat();123$zaku_ii->attack();$zaku_ii->walk();$zaku_ii->squat();もちろん何も内容を定義していないので何も起こりません。ついているので、以下のようにはアクセスできません。期待した出力は得られないこういうときには、ゲッター(Getter)と呼ばれるメソッドをよく定義されます。}こうすることで、プロパティを外部から見ることのみを可能にします。m";オブジェクト指向の3大要素を理解するオブジェクト指向を理解するためには、クラスを理解することが不可欠です。それは、クラスを理解することでオブジェクト指向の概要を把握することが可能だからです。オブジェクト指向を理解することで、同時にオブジェクト指向の3大要素と呼ばれている大きなメリットを得ることができます。オブジェクト指向の3大要素とは、「カプセル化」「継承」「ポリモーフィズム」の3つの要素を指します。次の章では、それらについてご説明していきたいと思います。カプセル化オブジェクト指向を利用するメリットにカプセル化が挙げられます。皆さんは、「カプセル」と聞くと「薬のカプセル」や「カプセルトイ」などが浮かんできたかと思います。この「カプセル化」もこのようなイメージであり、「中身を隠す」という機能です。中身を隠したいときに使うオブジェクト指向は、定義したモノを「いかにシンプルに扱えるか」が重要です。利用者は中身の仕様をよくわからなくとも簡単に扱える必要があります。クラスで定義されたものは出来るだけ壊されないようにする必要があります。付与して外部から中身が不意に書き換えられないようにするのです。継承とは、すでに用意されているクラスを、他のクラスを作成する時に活用する仕組みです。クラスを作成する時に、同じことを何度もプログラミングしなくて良いように「継承」の仕組みが用意されています。似たようなクラスを作成する際に、「継承」を利用すれば記述が簡略化できるのです。書き方PHPで継承を記載するときには、以下のような書き方をします。}既に作成してあった(元クラス)を利用して、それを継承した(新クラス)を作成する方法です。(元クラス)となる部分に基本的な要素を詰め込んでおいて、それを継承して(新クラス)を作成すると、少しの変更だけで新しいクラスを作成できます。ついているものは継承されず、新クラスからもアクセスできません。この点について詳しくまとめます。注意しておきたいこと継承を利用するときには注意しておきたいこともあります。それは、(元クラス)の全てを継承して(新クラス)が作成されるとは限らないことです。これは、アクセス修飾子がどのように定義されているかに左右されます。アクセス修飾子には、3種類あります。アクセス修飾子の種類public:継承可能。アクセス修飾子の定義が無い場合にはpublic扱い。private:継承不可能protected:継承可能。上記の通り、アクセス修飾子がprivateであると継承が適用されません。そのため、privateが含まれているクラスを継承する場合、全く同じクラスを基礎として新しいクラスが作成されるわけではありません。継承できるものだけを利用したクラスが作成されます。初心者のうちは、privateにしていることを忘れてしまい、継承ができないと戸惑ってしまうこともあると思いますので特に注意しておきましょう。ポリモーフィズムPHPでオブジェクト指向を利用するにあたり、理解に苦しんでしまう人も多いのがポリモーフィズムです。ポリモーフィズムは、そのまま訳すと「多様性」などの意味を持っています。「多様性」と言われても意味が分からないことでしょう。ザクで例えてみるポリモーフィズムを、ザクで例えてみましょう。ザクは、ガンダムに「攻撃」という行動をしているイメージがありますね。攻撃の動作は、人それぞれでイメージが異なります。「ザク・マシンガンで攻撃する人」もいれば、「ヒート・ホークを使う人」も、そして「クラッカーを使う人」もいることでしょう。同じ行動をするものの、その後の動作が異なるという仕組みのことをポリモーフィズムと呼ぶと思ってください。オブジェクト指向の世界では、同じメソッドを複数のクラスで利用してその動作が異なることをポリモーフィズムと呼びます。Aさん、Bさん、Cさんというクラスが存在しそれぞれが「攻撃する」というメソッドを持っていたときに、それぞれ異なった動作をすると捉えてみましょう。ポリモーフィズムを実装するそれでは、継承とポリモーフィズムについてコードを見てみましょう。