3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

1人コンプAdvent Calendar 2022

Day 15

[php]クラスって何?結局わからない!関数との違いは?

Posted at

はじめに

クラスって何?結局わからない!
私は今まで何度もクラスについて理解しようとしましたが、挫折を繰り返していました。
今回は、腹を括ってクラスについて学びます。

まずは関数

以下のような関数を作りました。

function animals($one,$two,$three){
	echo 'あなたの好きな動物は'.$one.'と'.$two.'と'.$three.'ですね!';
}

はい。
好きな動物3つを引数(ひきすう)に渡して表示するだけのなくても良いような関数です。
これをクラス化してみます。

class Like_animals{
	public $one;
	public $two;
	public $three;
	
	public __construct($one,$two,$three){//コンストラクタ。クラスが呼び出された時に最初に実行されるもの
		$this->one = $one;
		$this->two = $two;
		$this->three = $three;
	}

	public Echo(){
		echo 'あなたの好きな動物は'.$this->one.'と'.$this->two.'と'.$this->three.'ですね!';
	}
}

いかにも長ったらしくなりました。
これを起動するには、

$animals = new Like_animals('ブドウ','りんご','ゴリラ');
$animals->Echo();

ってやったげます。
そーすると、
あなたの好きな動物はブドウとりんごとゴリラですね!
っていうしょーもない内容が出力されます。

え,何?

え?ここまで読んで「結局何が関数とちゃうん?長ったらしいだけちゃうんか?おぉ?」というツッコミをされた方、いますよね。
ここからが本題です。
最近のゲームでは描写も美しく、レーシングゲームなんかを作る時も計算の量は膨大になります。
例えば、さっきのクラスで
・あなたの好きな動物はブドウとりんごとゴリラですね!
・あなたの好きな動物はブドウとりんごとゴリラかい?
・あなたの好きな動物はブドウとりんごとゴリラですからね?
・あなたの好きな動物はブドウとりんごとゴリラです!
・あなたの好きな動物はブドウとりんごとゴリラですよ
の5種類の文章を出力する必要があるとします。

これが関数だと、

function animals($one,$two,$three){
	echo 'あなたの好きな動物は'.$one.'と'.$two.'と'.$three.'ですね!';
}
function animals2($one,$two,$three){
	echo 'あなたの好きな動物は'.$one.'と'.$two.'と'.$three.'かい?';
}
//以下省略

というふうにいっぱい書かなくてはなりません。
そして、いちいち引数を宣言して処理するため時間がかかります。
ただ、これがクラスになると

class Like_animals{
	public $one;
	public $two;
	public $three;
	
	public __construct($one,$two,$three){//コンストラクタ
		$this->one = $one;
		$this->two = $two;
		$this->three = $three;
	}

	public Echo(){
		echo 'あなたの好きな動物は'.$this->one.'と'.$this->two.'と'.$this->three.'ですね!';
	}
	public Echo2(){
		echo 'あなたの好きな動物は'.$this->one.'と'.$this->two.'と'.$this->three.'かい?';
	}
	public Echo3(){
		echo 'あなたの好きな動物は'.$this->one.'と'.$this->two.'と'.$this->three.'ですからね?';
	}
}

$animals = new Like_animals('ブドウ','りんご','ゴリラ');
$animals->Echo();
$animals->Echo2();
$animals->Echo3();

あーら楽チン。
書く量が少ないし、コンストラクタで引数を保存しているため、引数を宣言し直す必要もありません。

まとめると

クラスを使うことで処理を速く、可視性の高いコードとなるのです。

でも、関数の方が良い時もある?

ここからは私の持論ですが、クラスを使うときは限られるんじゃないかな?なんて思います。
例えば、引数に1を足すプログラムを作るとき、関数なら

function plus_one($number){
	return $number+1;
}

ですみますが、クラスにすると

class Plus_one{
	public $number;

	public __construct($number){
		$this->number = $number;
	}

	public echos(){
		return $this->number+1;
	}
}
$one = new Plus_one(10);
echo $one->echos();

なんて長ったらしくなっちゃいます。
一つの値を使ってたくさんの処理をする必要があるときに、クラスは役に立つものなんじゃないでしょうか。

最後に

今回、初めてクラスについて学びました。
間違えているところ、多々あると思うので、指摘をよろしくお願いいたします。

3
1
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
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?