【php】classでconstructとdestructを使う方法の解説

constructとdestructphp
書いてる人
あいりゅー

プログラミングを学びながら更新しています。
iPhone/iPad/Mac/Apple WatchなどのApple製品はこちらで主に更新しています。
麻雀の反省をひたすら掲載してるブログもやってます。

あいりゅーをフォローする

このページについて

このページでは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クラスのインスタンスを作成しただけですが、インスタンスを生成したと同時にコンストラクトの中身を実行します。実際に実行すると以下のようになります。

construct

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が表示されます。

destruct

プログラムの処理と同時に何か決まった処理があるとか、表示したメッセージがあるとかの場合はこれを使ってみると良いかもしれません。ちなみに処理を中断する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で作ったフォームからのデータの受け取り方法と、その表示方法の解説です。
タイトルとURLをコピーしました