このページについて
このページではphpのclassで使えるconstructとdestructの解説をしています。
construct
constructはclassで使える関数です。読み方は「コンストラクト」や「コンストラクタ」なんて言ったりします。これはインスタンスの生成と同時に処理を行なってもらうという機能になります。
インスタンスとは「classのコピー」みたいな感じの認識でOKです。classに関する解説はこちらを参考にしてください。簡単に書くとclassは設計図であり、その設計図をコピーしたものがインスタンスです。そしてそのインスタンスを使って処理を行ったもののことを、オブジェクトと言います。
classは通常、インスタンスを生成→処理したデータを入れる→結果を受け取るという工程が必要です。ただしコンストラクトを使うと、インスタンスを生成すると同時に指定した処理を自動で行わせる事ができます。
コンストラクトの基本的な書き方は以下の通りです。
class クラス名 {
function __construct(パラメータ){
処理内容
}
コンストラクトは関数名のところに書きます。_を使うんですが、1つではなく2つ使います。そしてfunctionなのでパラメータを指定する事で引数を受ける事ができます。なくてもOKです。実際のサンプルと、その処理過程を解説します。
class test {
function __construct($num){
echo $num;
}
$a= new test(1);
class testというクラスを作成し、コンストラクトで$numを引き受けて引き受けた数字を出力するという関数を実行させます。そして$aはtestクラスのインスタンスを作成しただけですが、インスタンスを生成したと同時にコンストラクトの中身を実行します。実際に実行すると以下のようになります。
testクラスの引数として1を渡しただけですが、コンストラクタが実行されてechoで1が表示されています。このようにクラスのインスタンス作成と同時に処理を行わせる事ができるようになります。
どんな場面で役に立つのか
このコンストラクタがどんな場面で役に立つのかって話ですが、これはゲームの計算処理とかで大変便利です。例えば自分の攻撃力と技のダメージと相手の防御力という3つの要素を計算して最終ダメージが決まるのであれば、コンストラクタでそれぞれのパラメータを正しい順序で配置した計算式を作ればクラスのインスタンス作成と同時に結果が出ます。例としてこんな感じに組めます。
class dmg{ //クラス名はdmg
public $atk; //攻撃力
public $skill; //スキル倍率
public $def; //相手の防御力
public $dmg; //最終ダメージ
function __construct($catk,$cskill,$cdef) {
$this->atk = $catk;
$this->skill = $cskill;
$this->def = $cdef;
$this->dmg = $this->atk*$this->skill-$this->def;
}
}
$damage = new dmg(100,10,100);
echo $damage->dmg;
それぞれの変数は育成過程とか装備品とかで変わることを考慮して初期値を設定していません。これらはclassのメンバ変数の中身を変えるを参考にしてください。
そしてコンストラクタの関数の中で受け取った値をそれぞれのメンバ変数へと代入します。そしてメンバ変数を使って攻撃力*スキル倍率-相手の防御力というシンプルな計算式を実行してもらいます。
$damageはdmgクラスのインスタンスです。このインスタンスを生成するのと同時に3つの数値(攻撃力,スキル倍率,相手の防御力)を入力して計算式に渡すと、もう計算結果が返ってきています。
最後にechoでdamageの中の変数dmgを呼び出せば、計算結果が出力されます。実際にこれを行うと結果は900です。
destruct
constructはインスタンス生成時に機能する関数でしたが、反対にインスタンスの破棄と同時に発動するデストラクタというものがあります。これは簡単に言えば「classの終了時に自動で発動する処理」みたいなものです。サンプルは以下です。
class test {
function __destruct() {
print 'end class';
}
}
そしてインスタンスを作成すると他に行う処理がないため、destructが発動して中にあるend classが表示されます。
プログラムの処理と同時に何か決まった処理があるとか、表示したメッセージがあるとかの場合はこれを使ってみると良いかもしれません。ちなみに処理を中断するexit関数を使った場合でもdestructが発動します。
まとめ
constructもdestructもclassの開始時と終了時に自動で行ってほしい処理を行ってくれます。これらを使うとインスタンスを生成するだけで処理が行えるのでコードの削減にもつながります。ぜひとも簡略化できるところは簡略化しましょう。
- phpの基礎
- phpとは?JavaScriptとの違いは?みたいなことから、基本の書き方などを解説。
- echoとprint
- 画面に文字を出力する2種類の言語構造の使い方
- 変数
- phpで使える変数の扱い方などを解説しています。
- 変数のスコープ(有効範囲)
- 変数のスコープについての解説です。
- var_dump
- 変数の情報を見ることができる関数
- print_r
- 変数の情報をわかりやすい形式で表示する関数
- 配列と連想配列
- 配列と連想配列の書き方と、便利な関数の解説など。
- key
- 連想配列のキーを返してくれます。内部ポインタ関係あり。
- count
- 配列や連想配列の要素数を数えてくれる関数の使い方解説。
- ソート関数
- 配列に対してソートを行う関数の中から、代表的な5つの使い方解説です。
- array_reverse
- 配列の中身の順番を反転させる関数です。
- array_chunk
- 配列を指定した数で分割させるarray_chunk関数の使い方解説です。
- array_combine
- 2つの配列を足して1つの連想配列にする関数です。
- array_diff
- 2つの配列を比較して、存在しない値を出力する関数
- array_push
- 配列に対して後方に要素を追加する関数
- array_unshift
- 配列に対して先頭に要素を追加する関数。
- array_shift
- 配列の先頭の要素を取り出す関数。
- array_merge
- 複数の配列を統合して1次元の配列にする関数
- array_intersect
- 2つの配列を比較して、両方に共通するものを出力する関数
- include
- includeを使って別のphpファイルを読み込む方法の解説。
- if文
- if文を使って処理を変更させる方法の解説。
- switch文
- switch文を使って複数の処理分岐を行わせたい時に使います。
- forループ
- forループを使って同じ処理を行わせる方法の解説です。
- whileループ
- whileループを使って同じ処理を行わせる方法の解説と注意点。
- do-whileループ
- do-whileループを使って同じ処理を行わせる方法の解説です。
- foreachループ
- foreachループを使って配列内のアイテム全てに処理を行う方法の解説です。
- continue
- ループ処理の残りをスキップしつつ、ループの先頭に戻る制御構造
- ループのネスト構造(入れ子)
- ループの中にループを入れる書き方や考え方の解説。
- function
- functionを使って自作の関数を作成・使用する方法の解説。
- 引数の種類と書き方解説
- functionで扱う引数の種類と書き方を解説
- return
- returnの使い方と関数での使い方解説。
- class
- classを作成して変数と関数を1つにまとめる方法と使い方の解説。
- constructとdestruct
- classのインスタンス作成と同時に処理を行うconstructと、スクリプトの終了と同時に実行するdestructの解説です。
- インターフェイス
- インターフェイスという用語の解説と、実際の使い方解説
- トレイト
- コードを再利用するのに便利なトレイトの解説です。
- 列挙型
- プログラム中で使う変数名をあらかじめ定義しておく。そんな感じの型。
- PDOを使ってMySQLへ接続
- PDOを使ってMySQLへ接続し、データを取得する方法の解説です。
- データの加工と表示
- PDOでデータベースから取得したデータを加工して表示する方法の解説です。
- HTMLフォームのデータ受け取りと表示
- HTMLで作ったフォームからのデータの受け取り方法と、その表示方法の解説です。