単純な処理を行うだけなら実行する順番にコードを書いていけば完成しますが、複雑なプログラムで色々な処理を行うためにはそういったコードの書き方ではできません。機能ごとにコードを書いて、それに名前を付けて纏めて管理します。名前を付けてグループ化したソースコードは、何らかの処理を記述して、いわばプログラムの部品とします。
これをオブジェクト指向プログラミングといいます。プログラミングを勉強している方はこのオブジェクト指向という言葉を聞いたことがあると思います。複雑なプログラムがオブジェクト指向と思ったり、関数の使い方と似ていると思うかもしれませんが基本は上記の通りです。用途に応じたテクニックをこれから学んでいきましょう。
クラスとは
クラスとは簡単にいうとインスタンス(オブジェクト)を作るための設計図のようなものです。インスタンスとは実体のことを表します。
車で例えますと、まず車の設計図をクラスとして定義します。車は走ったり止まったり、ガソリンを供給したり消費したりなど様々な振る舞いを行ったりガソリンを入れるためのタンクがありますね。こういった車の機能や状態をクラスとして定義します。
設計図だけでは車は走ることができません。定義が出来たら車を実体として扱わないとその車は走ったり出来ませんよね。そのためにインスタンス化(実体化)して車を走らせたりできるようにします。
関数との違いの一つは、インスタンス化しないと実行できないという点です。
文章だけじゃ理解しづらいのでコードを書いていき学習していきましょう。
クラスとメンバー
クラスとはどのように定義するか説明していきます。
class Car{ //class クラス名{}と定義します。
$gasoline_tank; //プロパティ
$odometer;
function __construct() { //コンストラクター
$gasoline_tank = 0;
$odometer = 0;
}
function run(){ //メソッド
実行する処理...
}
function stop(){//メソッド
実行する処理...
}
}
class クラス名(){}で定義することを宣言するといいます。{}の中に機能などを書いていき、その中身を実装部とよびます。
実装部の最初にプロパティと呼ばれる、機能で使用する変数を定義します。
プロパティを定義したら次にコンストラクターと呼ばれる処理部分を定義します。コンストラクターとはクラスをインスタンス化した時に一番初めに行う処理であり、関数と基本的に同じものだと思って大丈夫です。初期処理なので上記コードではガソリンタンクやオドメーターを0にしています。
メソッドもコンストラクターと同じように関数として考えていただき、メソッド名を呼び出して実行される処理となります。
このクラス実装部の中のプロパティやメソッドなどの要素のことを纏めてメンバーと呼びます。
データを保持するためのプロパティ
関数で定義された変数が使えるのは関数内部だけでしたね。クラスで定義された変数のプロパティはスコープがクラス内部となります。
アクセス修飾子
プロパティを宣言するには次のように記述し定義します。
アクセス修飾子 $プロパティ名;
public | クラス内、クラス外のどこからでもアクセスできる。 |
protected | 同じクラス、サブクラスからアクセスできる。 |
private | 同じクラス内からのみアクセスできる。 |
クラス定義は専用ファイルで行う
これからクラスを作成してメンバーを定義していきますが、クラスは1つのファイルに1つのクラスを定義していきます。「クラス名.php」というようにソースファイルを作成し、利用する場合はインクルードします。そのメリットは
- ファイル名でクラスが分かる
- クラス単位で読み込むことで、余分なクラスなどを読み込まないようにできる
では、下記のようにコードを記述し、ファイルを作成しましょう。クラス名は頭文字を大文字にして定義します。ファイル名も同じようにしましょう。
class Car {
public $gasoline_tank;
}
プロパティだけを定義したクラスを用意しました。次にメソッドを定義していきます。
クラスに関数を(メソッド)
クラス内で定義する関数をメソッドというのでしたね。Carクラスにメソッドを用意しましょう。コードを見て定義方法を確認してください。
<?php
class Car {
public $gasoline_tank;
public $odometer;
public function run($gasoline_tank, $odometer, $distance){
$this->gasoline_tank = $gasoline_tank - $distance;
$this->odometer = $odometer + $distance;
}
}
?>
上記のコードのメソッドの部分の説明をします。
- メソッドにもアクセス修飾子を付けます
- $thisでこのクラス自体を表します。
- $this->でこのクラスのプロパティを参照しています
- $this->で参照するプロパティには$を付けません
- ->はアロー演算子といいます
クラスを実体にするインスタンス化
クラスを使用するためにまずインスタンス化を行い、クラスを実体にします。実体と言っても当たり前ですが実際に物ができるわけじゃあありません。インスタンス化とはクラスのメンバーがメモリ上に展開されることであり、その展開されたメンバーの集合体がインスタンスとなるのです。
では実際にインスタンス化をどうやるか見てみましょう。
$jeep = new Car();
このように、インスタンスを格納する変数にnew クラス名()と記述して代入します。こうすることで変数にインスタンスの参照が格納されるのです。
クラスという設計図を基にインスタンスをいくらでも生成出来ます。
$car1 = new Car();
$car2 = new Car();
$car3 = new Car();
他にも分かりやすく例えると、お店の会員を管理する場合、次のようにインスタンス化すればそれぞれに違った情報を持たせてインスタンスを扱えますね。クラスの定義は省略してます。
$user1 = new User("佐藤");
$user2 = new User("鈴木");
クラスのメンバーを呼び出す
新たにphpファイルを作成して、Carクラスを利用するためのコードを記述します。下記のコードはHTMLのbody要素の中に記述してください。(省略しても自動でHTMLの最低限の記述はされますが)
<?php
require_once = "Car.php";
$car = new Car();
$car->run();
print "走った距離は{$car->odometer}です";
?>
コメント