#今回の記事
phpを学んでいる中で、躓いた__constructについて初心者なりに解説していきたいと思います。
#__constructとは?
クラスから新しくインスタンスを生成する時に最初に実行される関数が__constructです。これを使用することにより、インスタンスを生成する際の初期化に用いることができます。
#インスタンス
上記で出てきたインスタンスとは、生成したクラスから値を作成するときに作るものです。クラスで定義したプロパティ(変数)を受け継いでいるものとして考えていただければ大丈夫です。
#使い方
まずは比べた方がわかりやすいと思うので__constructを使わない場合を見てみたいと思います。
- 書いたコード
<?php
class Post
{
public $text;
public $likes;
public function show()
{
printf('%s (%d)' . PHP_EOL, $this->text, $this->likes);
}
}
$posts = [];
$posts[0] = new Post;
$posts[0]->text = "hello";
$posts[0]->likes = 0;
$posts[1] = new Post;
$posts[1]->text = "hello again";
$posts[1]->likes = 0;
$posts[0]->show();
$posts[1]->show();
- 実行結果
hello (0)
hello again (0)
~ $
次に同じ内容で__constructを使った場合を見ていきます。
- 書いたコード
<?php
class Post
{
public $text;
public $likes;
public function __construct($text, $likes) //本題のコンストラクトの部分
{
$this->text = $text;
//ここで記入している$textや$likesはプロパティとは異なる変数ということに注意!
$this->likes = $likes;
}
public function show()
{
printf('%s (%d)' . PHP_EOL, $this->text, $this->likes);
}
}
$posts = [];
$posts[0] = new Post('hello', 0); //上記とは異なり、インスタンスの引数に設定
$posts[1] = new Post('hello again', 0);
$posts[0]->show();
$posts[1]->show();
- 実行結果
hello (0)
hello again (0)
~ $
__construct
はインスタンス生成時に実行される関数なので引数として渡します。
そして使い方としてpublic function __construct(変数)
と記入して使います。**また、 construct内で使っている$textや$likesはクラスのプロパティではないということに注意してください。**インスタンスの引数で渡した値が__construct
の$textや$likesに入り、プロパティに格納される仕組みになっています。
#まとめ
__construct
を定義することにより、newを使い呼び出すたびに初期化処理を確実に行っていくれるので記入漏れや呼び出いてから毎回定義しなくて済むのでとても便利です。クラスを使う時は必ず使うので使えるようになっておいて間違いはないです。