【PHP入門】オブジェクト指向プログラミングを理解しよう!

今回は、オブジェクト指向プログラミングのはじめの一歩を、PHPのコードを使って説明しています。

この記事では、以下のような期待に応えます。

「オブジェクト指向プログラミングの基本的な考え方を知りたい」
「オブジェクト指向プログラミングを学べる書籍を知りたい」
「PHPによるオブジェクト指向プログラミングの簡単なサンプルコードを見たい」

PHPでのオブジェクト指向プログラミングを学習する上で、とっかかりになる記事になっています。

サンプルコードもありますので、ぜひ動かしてみてくださいね!

PHPでオブジェクト指向プログラミングについて学ぼう!

オブジェクト指向プログラミングとは

オブジェクト指向プログラミングは、プログラムを書くうえでの考え方の1つです。

その他の考え方には、構造化プログラミングとか、関数型プログラミングといったものがありますので、興味がある方は、オブジェクト指向プログラミングと比べてみてくださいね。

さて、オブジェクト指向プログラミングのキモの1つに「カプセル化」があります。

その他にも「継承」「ポリモーフィズム」などもメリットとしてあげられますが、ここでは「カプセル化」の概要を理解しましょう。

まずは、オブジェクト指向プログラミングで「カプセル化」という考え方が使われるようになった経緯を簡単に説明しておきましょう。

プログラムを正しく動作させるには、非常に多くの変数を、正しく扱う必要がありますね。

しかし、プログラムの書き方によっては、変数を任意のタイミングで不適切な値に変更することもできてしまい、それがプログラマーにとって不可解なバグの原因となる問題が発生しました。

「カプセル化」は、このような問題を解決するために、変数を不適切な値に変更できないようにしよう、という考え方です。

「カプセル化」が実現できれば、変数を変更する際に厳密なチェックを行えるため、不適切な値に変更できなくなります。

また、変数を変更する際、別の変数を同時に変更する必要がある場合でも、安全に変更できるようになります。

つまり「カプセル化」を実現することで、プログラマーがより正しく変数を管理できるようになるというメリットがあるのです。

オブジェクト指向プログラミングのメリットがうっすらとでも感じられたでしょうか?

オブジェクト指向については、以下の記事でも詳しく解説していますので、ぜひ参考にしてみてください!

脱初心者のためのオブジェクト指向再入門
更新日 : 2019年8月15日
オブジェクト指向とは何か?わかりやすい例で説明してみた。
更新日 : 2019年9月11日

PHPとは

PHPは、Webアプリを制作するためのプログラミング言語です。

PHPがリリースされた当初は、オブジェクト指向プログラミングには対応していなかったため、上で説明したような「カプセル化」は不可能でした。

一方、PHPと同じようなスクリプト言語であるPythonRubyPerlなどがオブジェクト指向プログラミングに対応していました。

そのような時代の流れもあり、1998年にリリースされたPHP 3からオブジェクト指向プログラミングへの対応を始めました。

今では、PHPでのオブジェクト指向プログラミングは一般的になりました。

有名なフレームワークである「CakePHP」を使う際も、オブジェクト指向プログラミングの概要を理解している必要があります。

なお、PHP初心者に向けてPHPの特徴やできること、基礎学習については以下の記事で詳しく解説していますので、ぜひご覧ください!

【初心者向け】PHPとは? 言語の特徴やできること、作れるものを解説
更新日 : 2019年4月27日

オブジェクト指向プログラミングを学べる書籍

オブジェクト指向プログラミングを学べる書籍を3冊選んでみました。

オブジェクト指向のこころ (SOFTWARE PATTERNS SERIES)

プログラミングには、よく使われる設計パターンがあり、この設計パターンのことを「デザインパターン」と呼びます。

オブジェクト指向プログラミングと、デザインパターンは相性がよく、非常に効率的にプログラムを書けるようになりました。

この書籍では、デザインパターンの中から、重要度の高いものを厳選し、解説しています。

サンプルコードは主にJavaのようですが、考え方は参考になりますよ!

オブジェクト指向でなぜつくるのか 第2版

こちらもサンプルコードはJavaになりますが、オブジェクト指向プログラミングの全体像を平易な文章で説明した良書です。

オブジェクト指向プログラミングの概念を説明するだけでなく、フレームワークやデザインパターンなども整理して解説することで、オブジェクト指向プログラミングの全体像を理解しやすくなっています。

オブジェクト指向入門 第2版

書籍名に「入門」と書かれていますが、なかなか難しい本で、ここから読み始めるのはオススメできません。サンプルコードはEiffelです。

一方、ひととおりオブジェクト指向の概要を理解してから読むと、オブジェクト指向プログラミングの本質をドンドン理解できるでしょう。

この本が理解できるようになったら、オブジェクト指向プログラミングをマスターしたと言っても良いでしょう。

レベル別PHPのおすすめの書籍

PHPでオブジェクト指向プログラミングを学習するには、やはりPHPの学習本を読んだ方が近道でしょう。

概念を大ざっぱに理解した状態でも、プログラムを書いていけば徐々に理解が深まります。

PHPの学習本を使って、オブジェクト指向プログラミングに挑戦していきましょう!

PHPのおすすめの学習本については、以下の記事で解説しています!

【保存版】PHP学習おすすめ本12冊をレベル分け!入門、中級、上級編
更新日 : 2019年7月9日

PHPを効率よく学べる学習サイト

PHPによるオブジェクト指向プログラミングを効率よく学ぶには、無料の学習サイトを使用する方法もあります。

ちょっとした空き時間を無駄にせず、自分のペースで学べます。

また、一度では理解できなかった概念があったとしても、様々な学習サイトを利用することで、理解が深まることもあるでしょう。

初心者でも分かりやすく解説している学習サイトもあれば、ある程度理解している状態の読者に向けて、より深い内容を説明している学習サイトもあります。

いくつもの学習サイトを読んだとしても、無料であれば安心ですよね。

以下の記事では、PHP初心者向け講座のスライドを紹介しています。スライドをざっと見ていくだけでも、PHPの基本の知識を押さえられますよ。

PHPのクラスや関数の使い方について理解しよう

ここからは、少し具体的にPHPによるオブジェクト指向プログラミングを見ていきましょう。

オブジェクト指向プログラミングのメリットである「カプセル化」を体感するため、値が1ずつ増えるカウンターを見てみましょう。

細かいところを省略すると、以下のようにcounterクラスを定義し、counterクラスを利用する構造になっています。

counterクラスの定義

counterクラスの定義から見ていきましょう。

counterクラスを利用する方法は、以下の3つだけを定義しました。

  • public function __construct(int $c):値を初期化する
  • public function get():値を取得する
  • public function increment():値を1増やす

任意の値を設定できるのは初期化時だけにし、初期化後は自由な値を設定することも、値を減らすこともできない設計です。

なお、この3つは関数と同じfunctionキーワードを使用していますが、関数とは呼ばずに「メソッド」と呼びます。

counterクラスの実体化

ここまでで説明したcounterクラスはあくまで定義であって、利用するには実体を用意する必要があります。

PHPに用意されている整数型(integer)と比較しながら、counterクラスの実体を用意する方法を説明しましょう。

整数型の変数を利用するには、以下のように変数を用意して整数を代入する必要があります。

これに、少しキーワードを書き加えることで、counterクラスの実体を用意できます。

「new」が、クラスを実体化するためのキーワードです。

「counter()」は、counterクラスを指し示しています。

ちなみに、クラスを実体化したモノを「オブジェクト」と呼びますので、覚えておきましょう。

ここで例示しているプログラムでは、定義のことをcounterクラスと呼び、実体のことをcounterオブジェクトと呼ぶと理解してください。

1つのクラスに対して複数のオブジェクトを作成できますが、今回は「カプセル化」に焦点を合わせたいので、説明を省略します。

counterオブジェクトの操作

前もって、「counterクラスを利用する方法を3つ定義した」と説明しましたが、これは、「実体であるcounterオブジェクトを操作する方法が3つある」という意味でもあります。

作成したcounterオブジェクトを操作するには、->(矢印演算子)を使って、counterクラスで定義したget()メソッドを呼び出します。

このコードは、counterオブジェクトの値を取得して、Webページに表示しています。

1回目の呼び出しでは「100」が表示されます。

次に、同様の書きかたで、increment()メソッドを呼び出します。

これで、counterオブジェクトの値が1増えます。

1増えていますので、2回目のget()メソッドの呼び出しでは「101」が表示されます。

あとはここまで説明したことの繰り返しになりますので、実際に動かしてみてくださいね。

以上で、counterクラスの定義と、counterオブジェクトの利用を通じて、カプセル化のイメージがつかめたと思います。

PHPのクラスの使いかたについては以下の記事で詳しく解説していますので、あわせてご覧ください!

まとめ

オブジェクト指向プログラミングの実例として、非常に簡単なcounterクラスを紹介しました。

実は、このcounterクラスには、オブジェクト指向プログラミングのキモの1つである「カプセル化」の考え方が含まれていました。

たとえば、counterクラスを利用するときに、counterクラスの値を「$count」という変数が保持していることを気にする必要がありません。

また、counterクラスの値は、初期化時しか任意の値に設定できないこと、それから値を減らせないことも大切なことです。

このように、クラスの利用者が、クラスの内部構造を詳細に理解していなくても、利用する上ではまったく問題がないことが「カプセル化」の特長です。

もちろん、オブジェクト指向プログラミングは「カプセル化」を理解しただけでは、まだまだ不十分です。

理屈だけでは面白くないと思いますので、オブジェクト指向プログラミングを実践しながら、その他の特徴も理解していってください!

LINEで送る
Pocket

最短でエンジニアを目指すなら侍エンジニア塾

cta_under_bnr

侍エンジニア塾は業界で初めてマンツーマンレッスンを始めたプログラミングスクールです。これまでの指導実績は16,000名を超え、未経験から数多くのエンジニアを輩出しています。

あなたの目的に合わせてカリキュラムを作成し、現役エンジニア講師が専属であなたの学習をサポートするため効率よく学習を進めることができますよ。

無理な勧誘などは一切ありません。まずは無料体験レッスンを受講ください。

無料体験レッスンの詳細はこちら

書いた人

侍テック編集部

侍テック編集部

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説