関数と変数をまとめるクラス
プログラムをたくさん組んで複雑なものとなると、効率よく
プログラムをしていく機能が必要です。
変数と関数をまとめていく
ある特定のものに着目し、変数、関数を纏めたものをクラスと
いい、アマゾンで買い物をする「ユーザー」を考えると、ユーザーに関する
情報を変数として扱い、ユーザーが行う処理を関数にまとめる・・・
といったことを考えます。
「ユーザー」というものに注目して変数、関数をまとめれば
ユーザーに関数コードを別のプログラムで利用できます。
$name,$address,setName()などなど
クラスを定義する
クラスには、変数と関数をまとめて書きます。
このことをクラスの定義と言います。
class クラス名
{
$変数名 = 値;
function メソッド名(引数のリスト){
文;
・・・・
return 式;
}
}
クラスは、classという指定続けてクラス名を書きます。
クラス名は変数、関数と同じ規則で名前を付けることができます。
上記のアマゾンの例だと、
class Customer{
・・・・
}
classの後に続くブロック内に、変数、関数をまとめます。
クラス内部にまとめる変数をメンバ(member)といい
クラス内部にまとめる関数をメソッド(method)といいます。
オブジェクトを作成する
クラスを利用するためにクラスの定義を説明しました。
クラスを利用するには、もう1つやらなければならないことがあります。
オブジェクトを生成する
ことです。クラスは特定の物に着目して、情報や機能をまとめたものです、
クラスから作成される個々の存在をオブジェクト(object)と
呼んでいます。
オブジェクトはnew演算子を使って生成し、
オブジェクトを表す変数に代入します。
$オブジェクトを表す変数名 = new クラス名;
となり、Customerクラスをつくるなら以下のようにします。
//オブジェクトを生成し、$cuで扱えるようにする
$cu = new Customer();
変数$cuを経由して、Customerのメンバ、メソッドが
使えるようになります。
メンバ・メソッドを使う
オブジェクトのメンバ変数・メソッドを使うには、
$オブジェクトを表す変数名->メンバ変数名
$オブジェクトを表す変数名->メソッド();
さんぷるこーどを見た方が早いと思います。
サンプルコードの実行結果はこちら
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
<!doctype html> <html> <head> <meta charset="utf-8"> <title></title> <link rel="stylesheet" href="../style.css"> </head> <body> <?php //クラスの定義 class Customer { //メンバ変数宣言 public $name = ""; public $age = 30; //メソッド定義 function getName(){ return $this->name; } function getAge(){ return $this->age; } } //定義したオブジェクトを生成する $cu = new Customer; //メンバ変数に値を代入する $cu->name = "田中"; $cu->age = 25; //代入した変数を出力する echo "名前:" . $cu->getName(); echo "<br>"; echo "歳:" . $cu->getAge(); echo "<hr><br>"; ?> <?php $name = array("鈴木","田中","佐藤"); $age = array(15,17,19); for( $i = 0 ; $i < 3 ; $i++ ){ $customer[$i] = new Customer; $customer[$i]->name = $name[$i]; $customer[$i]->age = $age[$i]; echo "名前:" . $customer[$i]->getName(); echo "<Br>"; echo "年 :" . $customer[$i]->getAge(); echo "<br>"; } ?> </body> </html> |
上記のコードでは、13行目でCusomerクラスの定義を行い
クラスのブロック内でメンバ・メソッドの定義を行い、
名前と歳を格納する変数、その値を取得する変数の定義を行っています。
Customerクラス内部で自分自身のメンバ・メソッドを参照するときは、
$this->を付す必要があります。
getName()メソッドは、名前を返すため$this->を使い、
getAge()メソッドは、歳を返すために$this->ageを使います。
クラスからオブジェクトを生成することができ、
生成すると、その内部のメンバ・メソッドを利用することができる。
複数のオブジェクトを作る
オブジェクトはいくつでも作ることができます。
3人分のデータ管理も簡単にできます。
オブジェクトを3つ作れば大丈夫です。
サンプルコードの42行目意向をご覧ください。
3つのオブジェクトを生成し、
「鈴木・15」「田中・17」「佐藤・19」を43、44行目で
設定します。その後for文でループ処理をして、
各Customerクラスのメンバに値を代入しています。