こんにちは、大学院でIT系の研究を専攻している、ひらりんです。
PHPはサーバーサイドで動く言語で、世界中の多くのWebサイトがPHPによって記述されています。一括してコンパイルするのではなく、実行時に一行ずつコンパイルされることから、随時コードを確認できるのも、初心者が取り掛かりやすい理由のひとつです。
本記事では、PHPのconstructについて説明します。constructは、インスタンス生成時の初期化などに用いられる便利な関数です。しかし、他の言語のconstructと記述方法などが異なるため、いざプログラムに取り入れようとすると正しい書き方が分からなくなっちゃいますよね。
PHPのconstructについて、基本構文だけでなく実際のコードを用いた解説もするので、PHPの学習を始めた方やプログラムを書く予定の人はぜひ読んでみてください!
目次
PHPのクラス
まずは、プログラミングにおいて欠かせない概念の「クラス」について確認しておきましょう。
プログラムにおいて、複数回同じ処理をしたりすることがありますよね。毎回繰り返し書いても、たしかにプログラム自体は機能します。しかし、プログラムの量が増える分、エラーがでる可能性も高くなり、何より煩雑なプログラムになってしまいます。
また、初期値などを多く定義しておく場合も、種類や属性ごとにデータをまとめた方が、あとで見返したときや第三者がプログラムを見たときに理解しやすいですよね。
そんなときに使われるのが「クラス」です。クラスは、定数や変数などのデータ、どのようにデータを処理するかといった関数などの、複数の実行内容をまとめておく際に用いられる概念です。このクラスを使いこなせると、プログラムの汎用性が広がるので、理解しておくことが必要です!
PHPのクラスについては、以下のサイトなどを参考に学習しましょう!
参考 【初心者向け】PHPのクラス変数を解説!ウェブカツ ブログインスタンス
クラスについて触れたところで、次はインスタンスについて確認しましょう。インスタンスとは、簡単に言うと、クラスの内容を引き継いだものとなります。よく、クラスという「設計図」をもとに作られたものと説明されたりします。
インスタンスの書き方は次の通りです。
1 |
$インスタンス名 = new クラス名; |
このように、new演算子を使うことで、あらかじめ宣言しているクラスのインスタンスを作成することができます。なお、クラスの最初の文字は大文字で書くので、注意してください!
constructとは?
では、本テーマのPHPのconstructについて見てみましょう。そもそも、constructとは何でしょうか。
結論から言うと、constructはクラスを引き継いでインスタンスを作成する際に、必ず実行される関数です。クラス内に記述されている関数は、以下のようにインスタンス名にメソッドを記述することで実行されます。
1 |
$インスタンス名->メソッド名; |
しかし、constructを用いて記述することで、別途メソッド名を記述しなくても自動的に実行してくれる、とても便利な機能です。初期化する値などをconstructに入れたりと使い分けると、エラーも少なくなるので、ぜひ使えるようになっておきたいですね。
では、constructの使い方について見ていきましょう!
constructを使ってみよう!
constructの機能や役割について分かったところで、実際の使い方について確認しましょう。
基本構文
1 2 3 |
public function __construct(引数名){ // 処理内容 } |
PHPにおけるconstructは、このように書きます。最初の”public”とは、アクセス修飾子の1つです。constructは、インスタンスを生成したときに必ず実行される関数であるため、他のアクセス修飾子の”private”などを用いると、実行されなくなる場合があります。そのため、constructにおけるアクセス修飾子は一般的に“public”が使われます。
また、”function”と”construct”の間にアンダーバー(_)を2回記述します。さらに、constructの直後の括弧内に引数名を書いてください。この引数は、インスタンス作成時に、渡される引数となります。
では、実際のプログラム内で使用される例を見ていきましょう。
実践コード例
ここでは、construct関数の効果的な使い方を説明するために、同じ結果が得られるプログラムで、constructを使った場合と使わない場合のプログラム両方用いて説明します。まずは、constructを使わない場合のプログラムを見てみましょう。
constructを使わなかった場合
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
// クラスのGreetingを宣言 class Greeting { // プロパティを定義 public $language; // プロパティの$languageを定義 } // クラスGreetingより、インスタンスの$japaneseを定義 $japanese = new Greeting; // インスタンス$japaneseのプロパティ$languageについて、"こんにちは"を代入 $japanese->language = "こんにちは"; // publicなので、使用可能 // 関数echoを用いて表示 echo "挨拶は、" . $japanese->language . "です"; // 「挨拶は、こんにちはです」と表示される |
constructを使わないプログラム例です。上から順におってみましょう。2~7行目で、クラスのGreetingを定義しています。クラス内では、constructを使った記述等がないため、10行目でインスタンスを作成した時点では、プロパティの$languageが使えるという状態になっています。
このプロパティ$languageに値を代入したい場合は、13行目のように「インスタンス名->プロパティ」と指定し、代入したい要素を書きます。その結果、インスタンスのプロパティに値が代入され、16行目で代入されたものも含めて「挨拶は、こんにちはです」と表示されます。
同じ内容のプログラムをconstructを用いて書いてみましょう。
constructを使った場合
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
class Greeting { // プロパティを定義 public $language; // プロパティの$languageを定義 // construct関数を使用 public function __construct($language){ $this->language = $language; } // 表示する関数dispを作成 function disp() { echo "挨拶は、" . $this->language . "です"; } } // クラスGreetingより、インスタンスの$japaneseを定義 $japanese = new Greeting("こんにちは"); // クラス内のdisp関数を呼び出す $japanese->disp(); // 「挨拶は、こんにちはです」と表示される |
続いて、constructを使ったプログラムです。先ほどと同様のクラスGreeting内で、7~9行目にconstruct関数を使っています。この関数は、インスタンスを作成した際に自動的に実行されます。また、12~14行目でdisp関数を作成し、引数を代入された状態で表示されるような機能があります。
このGreetingクラスに対して、19行目でインスタンスを作成しました。この時点で引数を指定しているので、22行目ではインスタンス$japaneseの関数dispを呼び出すだけで、引数が代入された「挨拶は、こんにちはです」と表示されます!
まとめ
いかがでしたでしょうか?今回は、PHPのconstructについて、基本構文から実際の使い方について説明しました。
constructは言語別に書き方や使用場面さえ理解してしまえば、とても便利な機能です。ぜひ理解を深めて、Webサービス作成やシステム構築に活かしてください。