はじめに
クラスって何?結局わからない!
私は今まで何度もクラスについて理解しようとしましたが、挫折を繰り返していました。
今回は、腹を括ってクラスについて学びます。
まずは関数
以下のような関数を作りました。
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();
なんて長ったらしくなっちゃいます。
一つの値を使ってたくさんの処理をする必要があるときに、クラスは役に立つものなんじゃないでしょうか。
最後に
今回、初めてクラスについて学びました。
間違えているところ、多々あると思うので、指摘をよろしくお願いいたします。