【PHP基礎】オブジェクト指向をわかりやすくを解説!

今回はオブジェクト指向について学習します。

オブジェクト指向は初学者にとって非常に理解がしづらいテーマだと思います。

出来るだけ、図と具体例を出して分かりやすく書いてみました。

今回の記事で少しでも「オブジェクト指向」のイメージを掴んでいただけたら嬉しいです。

実際にオブジェクト指向を習得するにはプログラムに触れていくことで定着していきます。

是非今回のソースコードを使ってご自身でプログラムに触れてみてくださいね♪

オブジェクト指向とは?

オブジェクト指向とは?

ひとことで表現すれば、

変数と関数がひと固まりになったものを、色々な場面で再利用して使うことです!

別の記事でご紹介した関数でも触れましたが、

プログラミングをしていると、同じ関数や変数を使って何度も同じ処理を書いていくときがあります。

そんなとき、関数と変数をひとまとめにして、プログラムを見やすく操作しやすくしているものがオブジェクト指向です。

PHP 公式ドキュメント

オブジェクト指向はなぜ分かりにくいのか??

初学者にとってオブジェクト指向は分かりづらいです!

僕もプログラミング学習を始めたときは、さっぱりでした。

オブジェクト指向が理解しづらい理由は、

オブジェクト指向は大きな開発で使われるケースが多いからだと思っています。

振り返ると大きな開発を経験する機会のない初学者の自分にとって当然のことだった思います。

一方で逆を言えば大きな開発になってくるとオブジェクト指向の知識は必ず必要になってきます。

特にフレームワークではオブジェクト指向を利用することが非常に多いので、

慣れていく必要があるんです!

オブジェクト指向の使い方

オブジェクト指向をより具体的にイメージするには

鯛焼きが例としてあげられます。

鯛焼きの型(変数と関数のかたまり)がクラス

そしてクラスの機能を使うには実際に鯛焼きを焼くことのようにインスタンス化する必要があります。

また、変数のことをプロパティ

関数のことをメソッドといいます。

オブジェクト指向の書き方

class Taiyaki {

  // プロパティ
  private $name = 'たいやき';

  // コンストラクタ。インスタンス化すると自動で実行される。
  function __construct($taste){
    echo $taste.$this->name.'インスタンス化しました。';
  }
  // メソッド
  public function getName(){
    return 'パブリックで'.$this->name;
  }
  // staticメソッド。インスタンス化しなくても使える。
  public static function getStaticName($name){
    echo 'スタティックで'.$name;
  }
 }

$taste = '美味しい!';

// インスタンス化
$taiyaki = new Taiyaki($taste);

// インスタンス化したクラスのメソッドを使う
$getName = $taiyaki->getName();
echo $getName;

// スタティックメソッドインスタンス化しなくても使える。
Taiyaki::getStaticName($taste);

オブジェクト指向のプログラムを書いてみました!

ひとつづつ説明していきますね。

クラスの定義

class クラスの名前{
  クラスのなかの処理
}

クラスの定義はこのように書きます。

上の例ではTaiyakiクラスの定義しています。

class Taiyaki {

  // プロパティ
  private $name = 'たいやき';

そして$name変数を定義しています。こちらはクラスの中ではプロパティと呼びます。

publicとprivate

クラスの中の変数と関数にはpublicとprivateというアクセス修飾子を設定します。

publicはインスタンス化してクラスの外から使うことが出来ます。

privateはクラスの外からアクセスすることが出来ません。継承クラスからもアクセスできません。

クラスをインスタンス化する

new クラスの名前( 引数 )

クラスをインスタンス化して使えるようにするには、クラス名にnewをつけます。

上の例ではクラスの外でTaiyakiクラスをインスタンス化しています。

$taste = '美味しい!';

// インスタンス化
$taiyaki = new Taiyaki($taste);

インスタンス化することでクラスの中のプロパティやメソッドを使うことができるようになります。

そしてインスタンス化と同時に引数に$tasteを入れています。

コンストラクタメソッドを使う

function __construct( 引数 ){
  コンストラクタメソッドのなかで行う処理;
}

コンストラクタメソッドとはクラスをインスタンス化すると自動で呼び出されるメソッドです。

このようにメソッド名を__constructとして使うことが出来ます。

上の例では、引数に$taste、クラス内の$nameを使用しています。

// コンストラクタ。インスタンス化すると自動で実行される。
function __construct($taste){
  echo $taste.$this->name.'インスタンス化しました。';
}

実際にインスタンス化すると、

美味しい!たいやきインスタンス化しました。

こちらが出力されます!

クラスのメソッドとプロパティの使い方

// メソッド
public function getName(){
  return 'パブリックで'.$this->name;
}

続いて、クラスの中で設定されている関数を見てみましょう。

こちらはクラスの中なのでメソッドと呼びます。

メソッドのなかでは$this->nameが使われていますが、

$thisはこのクラスのことで、-> アロー演算子でnameを繋いでクラス内の変数である$nameを使っています。

インスタンス化したあとクラスのなかのメソッドやプロパティの使い方は

$クラスの名前->メソッドの名前( 引数 )

$クラスの名前->プロパティの名前

始めはアロー演算子を使った書き方になれるのが難しいのですが、

アロー演算子が出てきたらオブジェクトのメソッドかプロパティを使っているのだなと理解しましょう。

// インスタンス化
$taiyaki = new Taiyaki($taste);

// インスタンス化したクラスのメソッドを使う
$getName = $taiyaki->getName();
echo $getName;

そしてクラスのgetNameメソッドの使い方ですが、

まずは、インスタンス化して、

$taiyaki->getName();

というようにオブジェクトをアロー演算子で繋ぐことで使うことが出来ます。

getNameメソッドを入れた変数$getNameをechoすると、このように出力されます。

パブリックでたいやき

staticメソッドの書き方・使い方

最後にスタティックメソッドを見てみましょう。

スタティックメソッドとは、

クラスをインスタンス化しなくても使うことができるメソッドです。

書き方と呼び出しかたです。

// クラスの中でstaticメソッドを定義
public static function メソッドの名前( 引数 ){
  スタティックメソッドのなかで行われる処理
}

// staticメソッドを使う
クラスの名前::スタティックメソッドの名前 ( 引数 );

関数名の前にstaticをつけて定義します。

呼び出すときはクラスとメソッド名をコロンを2つでつなぎます。

上の例で見てみると、スタティックメソッドとして

getStaticNameメソッドを定義しています。

// staticメソッド。インスタンス化しなくても使える。
public static function getStaticName($name){
  echo 'スタティックで'.$name;
}

そしてクラスの外で呼び出しています。

// スタティックメソッドインスタンス化しなくても使える。
Taiyaki::getStaticName($taste);

実際にこちらのスタティックメソッドが使われると、このように出力されます。

スタティックで美味しい!

まとめ

オブジェクト指向について、

具体的な書き方・使い方を見てきました。

オブジェクト指向は理解が本当に難しい…。

「習うより慣れよ」という言葉が当てはまるかもしれません。

こちらの記事を読んで、

ぜひ、実際にソースコードをコピーしてを試して使っていただくと

徐々になれてイメージがつかめると思います!

他にもPHPについて情報発信しています。

よかったら覗いてみてくださいね!

by
関連記事

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です