Kintarou'sBlog

プログラミング学習中。学習内容のアウトプットや読書で学んだことなど随時投稿!

【PHP】クラスとインスタンスの作成

こんにちは😊Kintarouです。

現在エンジニア転職を目指してTECH CAMPにてプログラミング学習中です👨‍🎓
夢はフリーランスエンジニアになって働く人が働きやすいシステムを作ること!
と、愛する妻と海外移住すること🗽

プログラミングや読んでいる本のことなど、ブログに書いていきます!
twitter : https://twitter.com/ryosuke_angry


今回参考にさせて頂いたサイト様🙇‍♂️
dotinstall.com


クラスを作る

変数や関数が定義された"クラス"を作る方法をまとめます。
まずは$usersに名前(name)と年齢(age)、SNSアプリを仮定してフォロワー(Follower)を持った配列を作りましょう。

<?php

$users = [];
$users[0] = ['name' => 'Kintarou', 'age' => 30, 'follower' => 0];
$users[1] = ['name' => 'Kinjirou', 'age' => 35, 'follower' => 0];

#ユーザーを紹介するprofile関数も作りましょう。
function profile($user)
{
  printf('%s (%d)(%d)' . PHP_EOL, $user['name'], $user['age'], $user['follower']);
}

profile($users[0]);
#=>Kintarou (30)(0)

profile($users[1]);
#=>Kinjirou (35)(0)

この変数と関数を併せてまとめたいとなった場合にクラスが使えます。
クラスを使って同じ表現をしていきます。

<?php

class User
{
  #publicというアクセス修飾子で、どこでも使えるものにします。
  public $name;
  public $age;
  public $follower;

  #$thisという擬似変数でインスタンスの変数を使う事を指しています。
  public function profile()
  {
     printf('%s (%d)(%d)' . PHP_EOL, $this->name, $this->age, $this->follower);
}
  }


#以上がクラスの構造です。以下、クラスを使ったインスタンスを作成します。

$users = [];

$users[0] = new User();
$users[0]->name = 'Kintarou';
$users[0]->age = 30;
$users[0]->follower = 0;

$users[1] = new User();
$users[1]->name = 'Kinjirou';
$users[1]->age = 35;
$users[1]->follower = 0;

#クラスに設定した関数(メソッド)を使います。

$users[0]->profile();
#=>Kintarou (30)(0)

$users[1]->profile();
#=>Kinjirou (35)(0)

コンストラクタで簡易にインスタンスを作る

constructというメソッドを使い、new()に引数を渡してインスタンスを作成します。

<?php

class User
{
  public $name;
  public $age;
  public $follower;
  
  #ここにコンストラクタを記述します。アンダーバー2つを繋げて__constructとします。
  public function __construct($name, $age, $follower)
  {
    $this->name = $name;
    $this->age = $age;
    $this->follower = $follower;
  }

  public function profile()
  {
    printf('%s (%d)(%d)' . PHP_EOL, $this->name, $this->age, $this->follower
    );
  }
}

#コンストラクタを設定したので引数に要素を渡せば同じインスタンスを生成できます。

$users = [];

$users[0] = new User('Kintarou', 30, 0);

$users[1] = new User('Kinjirou', 35, 0);

$users[0]->profile();
#=>Kintarou (30)(0)

$users[1]->profile();
#=>Kinjirou (35)(0)

インスタンスの要素の初期値を設定する

インスタンス生成時はfollowerは0となるので、最初から初期値を0として設定します。

<?php

class User
{
  #followerに0を代入しておきます。
  public $name;
  public $age;
  public $follower = 0;
  
  #followerはコンストラクタで設定する必要が無くなります。
  public function __construct($name, $age)
  {
    $this->name = $name;
    $this->age = $age;
  }

  public function profile()
  {
    printf('%s (%d)(%d)' . PHP_EOL, $this->name, $this->age, $this->follower
    );
  }
}

$users = [];

#引数にも渡す必要が無くなります。
$users[0] = new User('Kintarou', 30);
$users[1] = new User('Kinjirou', 35);

$users[0]->profile();
#=>Kintarou (30)(0)

$users[1]->profile();
#=>Kinjirou (35)(0)

以上、どなたかの参考になれば幸いです😊