プログラミングのオブジェクト指向とクラスを徹底解説【PHPも解説】

PHP Programming


こんにちは。あきのりです。
プログラミングを勉強しつつ、Webサービスだったりゲーム開発(予定)をしています。

プログラミングを勉強していると「オブジェクト指向」だったり「クラス」という用語が出てくるんですが、最初は理解に苦しむんですよね。

とはいえ、これらはプログラミングの中でもめっちゃ重要だったりします。

多くのプログラミング言語でオブジェクト指向という方法を取られているので、理解はしておいて損はないです。
なので、今回はオブジェクト指向について、そしてその使い方をPHP(Laravel)と合わせて紹介したいと思います。

先に結論をまとめておくと

  • オブジェクト指向は設計図を各々作っていく手法のこと
  • その設計図をクラスと呼ぶ
  • オブジェクト指向はメンテナンスしやすかったり、使いまわしができる

オブジェクト指向とは「設計図を各々組み立てる」ということ

オブジェクト指向というのは設計図を1つ1つ作っていくことです。
これはあくまでプログラミングを書いていく方法の1つという意味です。

ある機能を持ったプログラムを先に用意しておき、それを別を場所で実際に呼び出すという形をとっています。

車には設計図があります。
エンジン、タイヤ、ハンドル、ボディ…などなど、どんなパーツが必要で、それらがどんな形をしていて、お互いにどう作用するかなどを細かく記しています。

これをプログラミングで「オブジェクト指向」と言います。
SNSを作ろうとしています。
そこには、投稿、削除、フォローなどの機能が必要で、「投稿は〇〇」、「削除は××」、「フォローは△△」という風にそれぞれをどうやって機能させるか、そういった設計図を作っていくということです。

オブジェクト指向のメリットは「効率性」

なんで、これをいろんな言語で取り入れられているかというと

  • 使いまわしができる
  • メンテナンスしやすい

さっきの車の例に戻ると、「同じ車100台追加で作りたい」となったとします。
設計図がなかったら、「よし、じゃあまた、エンジンとタイヤとハンドル…の設計をするぞ!」と、いちいち設計から始めないといけませんよね。

でも、「同じ車」なら当然エンジンもタイヤもハンドルも同じ設計で良いわけです。
1つの設計図さえあれば、その通りに機械を動かせば車は完成するわけです。

加えて、「エンジンかけても車が動かない」という問題が起こったとします。
このとき、設計図があれば「エンジンの設計部分にミスがあるな。ちょっと見てみよう」となります。
わざわざタイヤだったりハンドルに時間を割く必要が無くなるわけです。

プログラミングの場合も全く一緒です。
「投稿機能」はプロセスは基本同じなので、設計図を1つ作っておいてそれを使いまわせば良いですし、
「投稿が保存されない」という問題があれば、「投稿機能」の設計図を見れば問題は解決できるというわけです。

つまり効率がいいということです。

プログラミングではどうやって使うのか

次は実際に、オブジェクト指向でどうプログラムを書いていくか教えます。今回はPHP (Laravel)を例にとっていきます。
車の例を見ても分かる通り、流れはこんな感じです。

  • クラスの作成
  • インスタンス化
  • 機能を使う

設計図=クラス

さっきの車の設計図を、プログラミングではクラスと言います。


Class User
{
   $var = ...

   public function func() {
   
   }
}

このように、Class 'name'と宣言することでクラスを作ることができます。今回はUserというクラスを作ったということになります。

この中に変数やメソッド(関数)を入れていきます。
ここではUserクラス、つまりユーザーに関する設計図です。例えばユーザーに関する処理として「ユーザーの登録」、「プロフィールの編集」、「ホーム画面の出力」などをここにまとめていくということです。


Class User
{
   $user_id;
   $user_name;

   public function createUser($id, $name) {
       $this->user_id = $id;
       $this->user_name = $name
       //ユーザーの登録をする
   }
}

クラスの作り方にちょっとだけ注意点があるのでまとめておきます。

  • クラス名は先頭を大文字にする
  • ファイル内にクラスは一個だけ
  • ファイル名とクラス名は一致させる

クラスをインスタンス化させ、昨日を使う

車の例を見たように、設計図からモノ(エンジンだったりタイヤだったり)を作らないといけません。

クラスは設計図なので、実際にモノとして使えるようにする必要があります。それがインスタンス化です。


$user = new User();
$user->createUser(1, 'Yuriko');

1行目がインスタンス化です。new User()と宣言することで、Userクラスを「モノ」として作ったわけです。

2行目でcreateUserというメソッド(関数)を実行しています。ここでは「ユーザーの登録」を行っています。

->を使うことで「クラスの中の〇〇」という宣言をすることができます。

これがクラスの基本となります。

Laravelではどうなっている

実は、Laravelではあまりクラスを意識しなくても良いです。
というのも、自動で作られるようになっているからです(頼もしい)。

LaravelではMVCモデルというものを使っていて、ControllerやModelはまさにクラスです。

例えば「ツイッター」のようなものを作りたいとき、こんなコントローラーを作ります。


<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class TweetController extends Controller
{

    public function index() {
       //ツイート一覧画面を出す処理
    }

    public function create()
    {
       //新しいツイート画面を出す処理
    }

    public function store(Request $request)
    {
        //ツイートを投稿する処理
    }

    public function show($id)
    {
        //ツイートをクリックしたときにそのツイートの画面を出す処理
    }

    public function edit($id)
    {
        //ツイートを編集する画面を出す処理(実際にはないけど)
    }

    public function update(Request $request, $id)
    {
        //ツイートを更新する処理(実際にはないけど)
    }

    public function destroy($id)
    {
        //ツイートを削除する処理
    }
}

TweetControllerクラスは、ツイートに関する設計図で、その中にツイートに関する処理をまとめておくんですね。

そしてこれらは、web.phpという中で、使用されます。


Route::get('/tweet', [TweetController::class, 'index']);

http://example.com/tweetにアクセスしたら、TweetControllerindexを実行する、つまりツイート一覧を表示させるということになります。

先ほどのようにnew class()というように使うことは無いんですが、web.phpを通して同じことが起こっているんですね。

まとめ

ということで、以上です。
クラスは今後めちゃめちゃ出てくるのでぜひ理解してください。

おしまい。

スポンサードサーチ

オススメ英語学習用SNS "Our Dictionary"

人気記事英語学習用SNSをLaravelで作ってみた【システム解説あり】