PHPオブジェクト指向の超キ・ホ・ン、クラスを理解しよう
えー…皆さん!はじめまして!今日は2016年2月4日です。…とタイムリープ能力を持っているわけではありませんが!生まれた頃から記憶力が良く、何かの事象をきっかけに過去の記憶を明確に思い起こせるカルチョスです。
個人でSNSのコミュニティーを利用して8年ほどブログは書き続けており、最近では技術的な内容も書いたりしてますが、社内ブログは書くのは始めてなのでうまく伝えられるかどうか…。
まあやってみるほかないので書いていきます!内容はオブジェクト指向についてです!
オブジェクト指向ってなんぞ?
具体例で説明していきます。
例えば、今あなたの目の前に見えているパソコンはまさに「オブジェクト」です。
ではあなたはそれをどう使いますか?
パソコンだったら、キーボードで文字を入力したり、画面でマウスポインタを動かしたり。
オブジェクトに対して何らかの操作を行う手続きのことを「メソッド」といいます。
こうした何かのモノになぞらえた考え方をオブジェクト指向と呼んでいます。
では次にこのオブジェクト指向を使ったプログラムをPHPで作ってみましょう!
目次
オブジェクト指向を使ってプログラミングしてみよう!
オブジェクト指向プログラミングはC++、C#、Javaなどでもできますが、初心者の方でも取っ付き易いPHPで説明します。あ…ちなみに弊社ではPHPを使うことが多いですね。
例. PCクラスを作り、入力されたキーを設定して取得する
1. クラスを作ってみる
1 |
[sourcecode language="php"]<?php class PC{} ?>[/sourcecode] |
クラスとはオブジェクトを作るための設計図になります。今回はPCがクラス名になります。
2. クラス内で変数を定義してみる
1 2 3 4 5 6 7 |
[sourcecode lang="php"] <?php class PC{ $inputKey // メンバ変数 }?> [/sourcecode] |
クラスの中で定義された変数のことを「メンバ変数」と言います。
おや?何かが足りないような…。
プログラムわかる人ならすぐ気づくはず!安心して下さい!説明しますよ!!
3. アクセス修飾子を付けてみる
1 2 3 4 5 6 7 |
[sourcecode lang="php"] <?php class PC{ public $inputKey // メンバ変数 }?> [/sourcecode] |
「2. クラス内で変数を定義してみる」で設定したメンバ変数の前に付けたpublicのことを「アクセス修飾子」と言います。
これが大変重要で一般的に以下の3つがあり、その時々の場合に応じて使い分けをします。
- public…クラスの中、外、どこからでもメンバ変数にアクセス
- protected…同じクラスもしくはその派生クラス内のメンバ変数にアクセス
- private…同じクラス内のメンバ変数のみアクセス
4. 入力されたキーの設定と取得処理を書いてみる
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
[sourcecode lang="php"] <?php class PC{ public $inputKey; function setInputKey($inputKey){ $this->inputKey = $inputKey; } function getInputKey(){ return $this->inputKey; } }?> [/sourcecode] |
set〜とget〜の処理をそれぞれセッター、ゲッターと言い、合わせてアクセサーと呼びます。
UnrealEngine4でブループリントプログラムを組んでるときに変数の設定、取得と出てきて「あぁ〜!これかぁ〜…!」と納得したことがあります(笑)。
5. クラスの実体を生成し、値を設定してプログラムを実行してみる
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
[sourcecode lang="php"] <?php $pc = new PC(); class PC{ private $inputKey; function setInputKey($inputKey){ $this->inputKey = $inputKey; } function getInputKey(){ return $this->inputKey; } } $pc->setInputKey("ああああ"); echo $pc->getInputKey(); ?> [/sourcecode] |
初めにnew演算子を用いてクラスの実体を作ります。この実体のことを「インスタンス」と呼びます。インスタンスを生成したらsetInputKeyに値を入れて、getInputKey()で取得します。
以上になります。オブジェクト指向プログラミングを自由に扱えるようになるとプログラミングの幅がかなり広がります。大学時代に読んだ書籍にCの構造体を使って書かれたプログラムとC++のオブジェクト指向を使って書かれたプログラムが横並びで比較されているのを見た時は、C++のコードの美しさに大変感動したものです。(過去に見た光景を瞬時に現在に呼び戻しつつ語ってみる!)
参考サイト:PHPオブジェクト指向(前編) [Qiita],Objective-PHP.net