プログラミング最重要項目と言っても過言ではない、
「クラスとインスタンスの話」です。
クラスは設計図だ!とよく例えられますが、結局よくわからなくないですか?
今回は、これだけ知っておけば
- クラスを自分で書けるようになる
- インスタンス化をして活用できる
という状態を目指します!
クラスのイメージ
まずは良くある「設計図」のイメージについてです。
プログラミングでは、
処理を別のところにまとめておいて、使うときになったら呼び出して使う
という方法を取ることが多いです。
(イメージ↓)
クラス(設計図)に何を書けば良いのか?
例えばユーザ作成するとなった時は、どのユーザにも必要となる情報を考えます。
ユーザに必要な情報(プロパティ)
・名前
・ユーザID
・パスワード
・住所
etc..
これらは、プログラミング的には「プロパティ」と呼ばれるもので、変数として用意しておきます。
ユーザができる動作(メソッド)
・マイページの編集機能
・パスワードの変更機能
etc..
こちらは、関数として作成しておきます。
(ちなみに、クラスの中に作成した関数はメソッドと呼ばれるようになりますが、どちらも同じ意味です)
クラスをコードで書く時の手順
では、簡単にUserクラスを書いてみましょう。
必要な手順はこの3つです。
- Userクラスを作成
- プロパティを準備
- 関数を作成
①Userクラスを作成
設計図を作るためには、「class ◯◯ {}」と書けば完成です。
class User {
}
②ユーザ作成に必要な情報(プロパティ)を準備する
必要な情報はとりあえず、ユーザを作成するとなったらこれらの情報は必要になるかなと思います。
- $name
- $user_id
- $password
- $address
これらをプロパティに書くと書くとこうなります。
class User {
// プロパティ
public $name;
public $password;
public $user_id;
public $address;
}
③関数を準備する
今回はそこまでこだわる必要はないので、簡単な関数にしておきましょう。
class User {
// プロパティ
public $name;
public $password;
public $age;
public $phone_number;
// あいさつメソッド
function hello() {
echo 'おはようございます!';
}
}
これでクラスは完成です。
クラスをインスタンス化する時の手順
Userを作成する設計図(クラス)は完成したので、
これをもとにUserを作成しましょう。
- クラスをインスタンス化する
- プロパティを準備
- 関数を作成
①クラスをインスタンス化
実際にこの設計図を使うためには、
設計図を「コピー」して使わなければいけないというルールがあります。
そのコピーをプログラミングではインスタンス化と言います。
インスタンス化(コピー)
new クラス名();
インスタンス化(コピー)と言ってもこれだけです。
今回のクラス名はUserなので「new User()」とすればOKです。
<?php
// Userクラス
class User {
// プロパティ
public $name;
public $password;
public $age;
public $phone_number;
// あいさつメソッド
function hello() {
echo 'おはようございます!';
}
}
// Userクラスをインスタンス化
$taro = new User();
$taro->hello();
?>
コピーした結果を使いやすいように$taroという変数に入れておきました。
すると、今$taroの中はUserクラスと全く同じ状況になっていることになります。
つまり、Userクラスの中にあったhelloメソッドは、
$taro->hello();
この形でアクセスすることができます。
実際に使うときはこれだけ覚えておけば良い
クラスの書き方とインスタンスの方法は上記の通りですが、どのような考えで、
よし、インスタンス化しよう!
となるのでしょうか?
書き方が分かったとしてもこれがわからないと使えないですよね…
小難しいことは置いておいて、
どういう時にインスタンス化するのかはこれだけ知っておけば大丈夫です!
インスタンス化するタイミングは、
使いたいメソッドが、別クラスにある時
です!
例えば、
メールを送信する機能をこれから作ろうと思ったとします。
しかし、よく見るとMailクラスというクラスに、
sendMailというメソッド名でメール送信機能が既に作成済みだったとします。
どうにかしてこのsendMailメソッドを使いたいですよね。
大丈夫です。使えます。
Mailクラスという設計図をコピーしてしまえば、
その中に入っているメソッドを使用することができるようになります。
それがインスタンス化です。
例えば、こんな感じです。↓
<?php
// Mailクラス
class Mail {
// メール送信機能
function sendMail() {
}
}
// Mailクラスをインスタンス化
$mail = new Mail();
$mail->sendMail();
?>
まとめ
- クラス(設計図)はインスタンス化(コピー)しないと使うことはできない
- インスタンス化すると、新しい変数に入れ直して使用する
- 「->」の記号を使って変数やメソッドにアクセスできる
- インスタンス化するタイミングは、「使いたい変数やメソッドが別クラスにある時」