0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Laravel入門】お笑い芸人を配置して劇場を盛り上げよう!~クラス設計で学ぶPHPオブジェクト指向~

Posted at

はじめに

Laravelを使ってプログラミングを学びたい方へ!
今回は「お笑い芸人」と「劇場」をテーマに、クラス設計やオブジェクト指向の基礎を楽しく学べる記事を書きます。
劇場の支配人になったつもりで、どの芸人コンビをブッキングするか考えながら進めてみましょう!


🎤 1. 芸人コンビクラスを作ろう

まずは芸人コンビを表現するクラスを作成します。
ボケ・ツッコミの名前、得意ジャンル、人気度などをプロパティにしてみましょう。

// app/Models/Combi.php

namespace App\Models;

class Combi
{
    public string $name;
    public string $boke;
    public string $tsukkomi;
    public string $genre; // '漫才', 'コント', '両方'
    public int $popularity; // 人気度(1~100)

    // 👇 コンストラクタの説明はこの下に!
    public function __construct($name, $boke, $tsukkomi, $genre, $popularity)
    {
        $this->name = $name;
        $this->boke = $boke;
        $this->tsukkomi = $tsukkomi;
        $this->genre = $genre;
        $this->popularity = $popularity;
    }

    public function introduce()
    {
        echo "{$this->name}(ボケ: {$this->boke}/ツッコミ: {$this->tsukkomi})が登場!\n";
        echo "得意ジャンル: {$this->genre}\n";
    }

    public function perform()
    {
        echo "{$this->name}{$this->genre}を披露!\n";
    }
}

🧑‍🏫 コンストラクタ(__construct)とは?

PHPのクラスでは、__constructという特別なメソッドを「コンストラクタ」と呼びます。
コンストラクタは「インスタンス(実体)を作るときに最初に自動で実行される命令」のことです。

たとえば、次のようにコンビを作ると…

$reiwaRoman = new Combi('令和ロマン', '髙比良くるま', '松井ケムリ', '両方', 90);

このとき、__constructの中身が自動で呼ばれて、
それぞれのプロパティ($name, $boke, $tsukkomi, $genre, $popularity)に値がセットされます!

イメージ:
「コンストラクタは、芸人コンビが楽屋入りしたときに“自己紹介カード”を渡す係」みたいなものです。


🎪 2. 劇場クラスを作ろう

続いて、芸人コンビを管理し、売上シミュレーションができる劇場クラスを作成します。

// app/Models/Theater.php

namespace App\Models;

class Theater
{
    public array $combies = [];
    public int $baseSales = 10000; // 基本売上

    public function addCombi(Combi $combi)
    {
        $this->combies[] = $combi;
    }

    public function simulateSales()
    {
        $totalPopularity = array_sum(array_map(fn($c) => $c->popularity, $this->combies));
        $sales = $this->baseSales + $totalPopularity * 500;
        echo "今日の出演コンビ:\n";
        foreach ($this->combies as $c) {
            echo "- {$c->name}(人気度: {$c->popularity}\n";
        }
        echo "本日の売上予想:{$sales}\n";
    }
}

🎯 コード解説

  • public array $combies = [];
    劇場に出演する芸人コンビ(Combiクラスのインスタンス)を格納するための配列です。
    ここにaddCombiメソッドでどんどんコンビを追加していきます。

  • public int $baseSales = 10000;
    劇場の基本売上(初期値)を表します。
    ここにコンビの人気度による売上増加分が加算されます。

  • public function addCombi(Combi $combi)
    引数で受け取ったCombiインスタンス(芸人コンビ)を、$combies配列に追加します。
    支配人が「今日このコンビをブッキング!」というイメージです。

  • public function simulateSales()
    劇場の本日の売上をシミュレーションするメソッドです。

    • まず、全てのコンビの人気度($popularity)を合計します($totalPopularity)。
    • 売上は、「基本売上 + 人気度合計 × 500円」で計算されます。
    • 今日出演するコンビ一覧と、それぞれの人気度を表示します。
    • 最後に、本日の売上予想額を表示します。

このクラスを使うことで、
「どのコンビをブッキングするかによって、劇場の売上がどう変わるか?」を簡単にシミュレーションできます!

📝 3. 実際に使ってみよう

ArtisanコマンドやTinkerなどで、以下のように使えます。

use App\Models\Combi;
use App\Models\Theater;

// コンビを作成
$reiwaRoman = new Combi('令和ロマン', '髙比良くるま', '松井ケムリ', '両方', 90);
$magicalLovely = new Combi('マヂカルラブリー', '野田クリスタル', '村上', '両方', 85);

// 劇場を作成
$theater = new Theater();
$theater->addCombi($reiwaRoman);
$theater->addCombi($magicalLovely);

// シミュレーション
$theater->simulateSales();

出力例:

今日の出演コンビ:
- 令和ロマン(人気度: 90)
- マヂカルラブリー(人気度: 85)
本日の売上予想:182500円

💡 発展

  • コンビの人気度をランダムで決めてみよう
  • 得意ジャンルで売上にボーナスをつけてみよう
  • 今日の出演コンビを毎回ランダムで選ぶようにアレンジしてみよう

まとめ

Laravelのクラス設計を通じて、

  • オブジェクト指向の考え方
  • クラスとインスタンスの使い方
  • プロパティ・メソッド、コンストラクタの役割

を楽しく学ぶことができました!
自分の好きな芸人コンビやオリジナル劇場を追加して、どんどんアレンジしてみてください。


0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?