Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【PHP8.x】Override::__construct()メソッドの使い方

__constructメソッドの使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

__constructメソッドは、Overrideクラスのインスタンスが作成される際に、そのオブジェクトを初期化するために自動的に実行される特別なメソッドです。このメソッドの主な役割は、新しいオブジェクトが利用できる状態になるように、必要な初期設定を行うことです。具体的には、クラスが持つプロパティに初期値を割り当てたり、オブジェクトが動作するために必要な外部リソース(例えばデータベース接続など)の準備を行ったりします。

開発者は、newキーワードを使ってクラスの新しいインスタンスを生成する際に、__constructメソッドに引数を渡すことができます。これにより、オブジェクトの初期状態を柔軟にカスタマイズし、作成時に必要な情報を設定することが可能になります。例えば、ユーザー情報を扱うオブジェクトであれば、コンストラクタでユーザーIDや名前を渡して初期化することができます。

__constructメソッドは、オブジェクトのライフサイクルにおいて最初に呼び出されるメソッドであり、そのオブジェクトが常に有効で一貫した状態であることを保証するために非常に重要です。このメソッドは、クラスの設計において、オブジェクトの初期化ロジックをカプセル化し、オブジェクトが不正な状態で生成されることを防ぐ役割を果たします。

構文(syntax)

1class Override
2{
3    public function __construct(private string $parameter1, private int $parameter2)
4    {
5    }
6}

引数(parameters)

引数なし

引数はありません

戻り値(return)

戻り値なし

戻り値はありません

サンプルコード

PHP8 コンストラクタプロパティプロモーションでクラスを簡潔にする

1<?php
2
3/**
4 * PHP 8 のコンストラクタプロパティプロモーション(Constructor Property Promotion)を示すクラス。
5 *
6 * この機能により、コンストラクタの引数宣言と同時にプロパティの宣言と初期化を行うことができます。
7 * コードが簡潔になり、クラスの定義がよりすっきりします。
8 */
9class Product
10{
11    /**
12     * Product クラスの新しいインスタンスを生成します。
13     *
14     * @param string $name       商品の名前
15     * @param float  $price      商品の価格
16     * @param bool   $isInStock  商品が在庫にあるかどうか (デフォルトは true)
17     *
18     * コンストラクタ引数の前にアクセス修飾子 (public, protected, private) をつけることで、
19     * その引数が同名のクラスプロパティとして自動的に作成され、初期化されます。
20     * プロパティの型宣言も同時に行われます。
21     */
22    public function __construct(
23        public string $name,       // public プロパティ 'name' が自動的に作成・初期化される
24        public float $price,       // public プロパティ 'price' が自動的に作成・初期化される
25        private bool $isInStock = true // private プロパティ 'isInStock' が自動的に作成・初期化される (デフォルト値あり)
26    ) {
27        // プロパティの初期化がコンストラクタの引数で行われるため、
28        // ここにプロパティ代入のコードを記述する必要はありません。
29        // 必要であれば、追加のバリデーションや複雑な初期化ロジックを記述できます。
30    }
31
32    /**
33     * 商品の現在の在庫状況と価格を含むステータス文字列を返します。
34     *
35     * @return string 商品のステータス情報
36     */
37    public function getStatus(): string
38    {
39        return sprintf(
40            "%sの価格は %.2f円で、在庫は%s。",
41            $this->name,
42            $this->price,
43            $this->isInStock ? 'あります' : 'ありません'
44        );
45    }
46
47    /**
48     * 商品が在庫にあるかどうかを返します。
49     * private プロパティへの外部からのアクセス手段を提供します。
50     *
51     * @return bool 在庫があれば true、なければ false
52     */
53    public function isInStock(): bool
54    {
55        return $this->isInStock;
56    }
57}
58
59// Product クラスのインスタンスを作成します。
60// コンストラクタプロパティプロモーションのおかげで、
61// クラスのプロパティを簡潔に定義し、初期化できます。
62$laptop = new Product('高性能ノートPC', 150000.00);
63$mouse = new Product('ワイヤレスマウス', 3500.00, true);
64$keyboard = new Product('メカニカルキーボード', 12000.00, false);
65
66// 各商品の情報を表示します。
67echo $laptop->getStatus() . PHP_EOL;
68echo $mouse->getStatus() . PHP_EOL;
69echo $keyboard->getStatus() . PHP_EOL;
70
71echo PHP_EOL;
72
73// public プロパティには直接アクセスできます。
74echo "商品名: " . $laptop->name . PHP_EOL;
75echo "価格: " . $laptop->price . PHP_EOL;
76
77// private プロパティには直接アクセスできませんが、
78// ゲッターメソッド(例: isInStock())を通じてアクセスできます。
79echo "ワイヤレスマウスの在庫状況: " . ($mouse->isInStock() ? '在庫あり' : '在庫なし') . PHP_EOL;
80

PHPの__constructメソッドは、クラスから新しいオブジェクト(インスタンス)を作成する際に自動的に呼び出される特別なメソッドです。その主な役割は、オブジェクトが持つプロパティの初期設定を行うことです。

PHP 8では、「コンストラクタプロパティプロモーション」という機能が導入され、クラス定義が簡潔になりました。この機能を使うと、__constructメソッドの引数にpublicprivateなどのアクセス修飾子を付けるだけで、その引数が同名のクラスプロパティとして自動的に宣言され、同時に初期化されます。これにより、プロパティの宣言とコンストラクタ内での代入処理が不要となり、コードを簡潔に保てます。

サンプルコードのProductクラスでは、商品の名前、価格、在庫状況を__constructの引数として受け取り、これらがpublicprivateのプロパティとして自動的に設定されています。__constructメソッドはオブジェクトの初期化を完結させるため、明示的な戻り値は持ちません。この機能は、コードの可読性と保守性を高めることに貢献します。

PHP 8で導入されたコンストラクタプロパティプロモーションは、コンストラクタの引数にアクセス修飾子(public, protected, private)を記述することで、プロパティの宣言と初期化を同時に行うことができる便利な機能です。これにより、クラス定義の記述量を減らし、コードをより簡潔にできます。ただし、PHP 8より前のバージョンではこの機能は動作しませんので注意が必要です。また、privateprotectedをつけたプロパティはクラスの外部から直接アクセスできないため、必要に応じてゲッターメソッドなどのアクセス手段を別途提供する必要があります。この機能は、クラスの初期化ロジックを効率的に記述するために役立ちます。

PHP: parent::__construct で親コンストラクタを呼び出す

1<?php
2
3/**
4 * 親クラスの例
5 *
6 * 親クラスには、そのインスタンスが作成されるときに自動的に実行される
7 * コンストラクタ(__construct)が定義されています。
8 */
9class ParentClass
10{
11    /**
12     * ParentClassのコンストラクタ
13     *
14     * このメソッドは、ParentClassの新しいインスタンスが作成される際に
15     * 自動的に呼び出されます。
16     * 引数はありません。
17     *
18     * @return void
19     */
20    public function __construct()
21    {
22        echo "ParentClass のコンストラクタが実行されました。\n";
23    }
24}
25
26/**
27 * 子クラスの例
28 *
29 * ChildClass は ParentClass を継承しています。
30 * 子クラスで独自のコンストラクタを持つ場合、明示的に親クラスのコンストラクタを
31 * 呼び出す必要があります。
32 */
33class ChildClass extends ParentClass
34{
35    /**
36     * ChildClassのコンストラクタ
37     *
38     * 子クラスのインスタンスが作成される際に呼び出されます。
39     * 引数はありません。
40     *
41     * @return void
42     */
43    public function __construct()
44    {
45        // キーワード: parent
46        // 親クラス(ParentClass)のコンストラクタを呼び出します。
47        // これがないと、ParentClassのコンストラクタは実行されません。
48        parent::__construct();
49
50        echo "ChildClass のコンストラクタが実行されました。\n";
51    }
52}
53
54// ChildClass の新しいインスタンスを作成します。
55// これにより、ChildClass のコンストラクタが実行され、
56// その中で `parent::__construct()` が呼び出されるため、
57// まず ParentClass のコンストラクタ、次に ChildClass のコンストラクタの順で出力されます。
58$childInstance = new ChildClass();
59
60?>

PHPの__constructメソッドは、クラスの新しいインスタンスが作成される際に自動的に実行される特別なメソッドです。これはオブジェクトの初期化処理に用いられ、引数なし、戻り値なし(void)のメソッドです。

サンプルコードでは、ParentClassChildClassにそれぞれ__constructが定義されています。ChildClassParentClassを継承していますが、子クラスで独自のコンストラクタを定義した場合、親クラスのコンストラクタは実行されません。

親クラスの初期化も行いたい場合、子クラスのコンストラクタ内でparent::__construct()を呼び出す必要があります。これは、子クラスから親クラスのコンストラクタを明示的に実行する記述です。

このサンプルコードを実行すると、ChildClassのインスタンス作成時に、まずChildClassのコンストラクタが実行されます。その中でparent::__construct()が呼び出されるため、「ParentClass のコンストラクタが実行されました。」と表示された後、「ChildClass のコンストラクタが実行されました。」という順序でメッセージが出力されます。これにより、継承関係にあるクラス間で初期化処理を適切に連携できます。

__constructメソッドは、クラスのインスタンスが作成される際に自動的に実行される特別な初期化メソッドです。子クラスで独自の__constructメソッドを定義した場合、親クラスの__constructは自動的には呼び出されません。親クラスの初期化処理を確実に実行するには、子クラスの__construct内でparent::__construct();と明示的に呼び出す必要があります。この呼び出しを忘れると、親クラスで設定された初期値や重要な処理がスキップされ、プログラムが正しく動作しない原因となるため、特に注意が必要です。通常、parent::__construct();は子クラスのコンストラクタの最初に記述し、親の初期化を先に行うようにします。

PHPの__construct()でオブジェクトを初期化する

1<?php
2
3/**
4 * MyClassは、オブジェクト指向プログラミングにおけるクラスの基本的な概念と、
5 * コンストラクタの役割を示すためのサンプルクラスです。
6 * クラスのインスタンスが作成される際に、__construct() メソッドが自動的に呼び出されます。
7 */
8class MyClass
9{
10    /**
11     * @var string オブジェクトが持つメッセージを保持するプロパティです。
12     */
13    private string $name;
14
15    /**
16     * コンストラクタメソッドです。
17     * このメソッドは、`new MyClass()` のようにしてクラスの新しいインスタンスが作成されると、
18     * 自動的に一度だけ実行されます。
19     *
20     * - 引数: リファレンス情報に基づき、引数はありません。
21     * - 戻り値: コンストラクタは値を返しません。
22     *
23     * 主にプロパティの初期化や、オブジェクトが使用可能になるための初期設定を行います。
24     */
25    public function __construct()
26    {
27        // オブジェクトが作成された際に、プロパティを初期化します。
28        $this->name = "サンプルオブジェクト";
29        echo "コンストラクタが実行されました: \"{$this->name}\" が作成されました。" . PHP_EOL;
30    }
31
32    /**
33     * オブジェクトの名前を表示するメソッドです。
34     *
35     * @return void
36     */
37    public function displayMessage(): void
38    {
39        echo "これは、{$this->name} からのメッセージです。" . PHP_EOL;
40    }
41}
42
43// MyClassの新しいインスタンスを作成します。
44// この行が実行されると同時に、MyClass::__construct() メソッドが自動的に呼び出されます。
45$myInstance = new MyClass();
46
47// 作成されたインスタンスのメソッドを呼び出します。
48$myInstance->displayMessage();
49
50?>

PHPの__constructメソッドは、クラスから新しいオブジェクト(インスタンス)を作成する際に、自動的に一度だけ実行される特別なメソッドです。これを「コンストラクタ」と呼びます。主に、オブジェクトが使用可能になるために必要な初期設定や、プロパティの初期値を設定する目的で使用されます。

サンプルコードのMyClassでは、new MyClass()と記述してオブジェクトを作成した瞬間に、__construct()メソッドが自動で呼び出されます。このメソッド内では、クラスが持つ$nameプロパティに「サンプルオブジェクト」という初期値を設定しています。このように、オブジェクトの生成と同時に初期化処理を実行できるため、オブジェクトの状態を確実に準備できます。

この__constructメソッドは、リファレンス情報にある通り、引数を持ちません。そのため、オブジェクト作成時に特別な値を受け取る必要がない場合に適しています。また、コンストラクタはオブジェクトを初期化する役割を持つため、何らかの値を「返す」ことはなく、戻り値もありません。

コンストラクタによって初期化されたオブジェクトは、その後の処理で安心して利用できます。サンプルコードでは、初期化された$nameプロパティを使ってdisplayMessage()メソッドが実行され、オブジェクトが持つメッセージが正しく表示されています。これは、オブジェクト指向プログラミングにおいて、オブジェクトの整合性を保つ上で非常に重要な機能です。

__constructメソッドは、クラスから新しいオブジェクトが作られる際に、一度だけ自動的に実行される特別なメソッドです。サンプルコードでは引数がないため、オブジェクトが常に同じ状態で初期化されますが、一般的には引数を使って外部から初期値を渡し、オブジェクトごとに異なる設定を行うことが多い点を覚えておくと良いでしょう。このメソッドは値を返すことができませんので、プロパティの初期化や、オブジェクトが機能するために必要な初期設定にのみ集中して利用するのが良い使い方です。オブジェクト生成時にこのメソッドが自動で動くことを理解し、意図しない動作を避けるように注意してください。

PHP __constructでオブジェクトを構築する

1<?php
2
3/**
4 * Override クラスの例。
5 * このクラスは、オブジェクトの構築時に自動的に実行される__constructメソッドの動作を示します。
6 */
7class Override
8{
9    // このクラスのオブジェクトが持つメッセージを保存するプロパティ
10    private string $internalMessage;
11
12    /**
13     * コンストラクタメソッドです。
14     * オブジェクトが `new Override()` のように生成される際に、
15     * 引数なしで自動的に一度だけ呼び出されます。
16     * 主にオブジェクトの初期化処理を行います。
17     */
18    public function __construct()
19    {
20        // オブジェクトが生成されたことを示すメッセージを内部プロパティに設定します
21        $this->internalMessage = "Override クラスのオブジェクトが正常に構築されました!";
22        
23        // オブジェクト構築時に処理が実行されたことをコンソールに出力して確認します
24        echo "コンストラクタが実行されました: " . $this->internalMessage . PHP_EOL;
25    }
26
27    /**
28     * オブジェクトの現在の内部メッセージを表示するメソッド。
29     * コンストラクタで設定された値を確認するために使用します。
30     */
31    public function getStatus(): string
32    {
33        return "現在のオブジェクトの状態: " . $this->internalMessage;
34    }
35}
36
37// --- 単体で動作させるためのコード ---
38
39// Override クラスの新しいオブジェクトを生成します。
40// この瞬間に上記の __construct() メソッドが自動的に呼び出されます。
41$myObject = new Override();
42
43// オブジェクトのgetStatusメソッドを呼び出して、
44// コンストラクタで設定された初期値を確認します。
45echo $myObject->getStatus() . PHP_EOL;
46
47?>

このPHPのサンプルコードは、クラスのオブジェクト生成時に一度だけ自動的に実行される特別なメソッド、__construct(コンストラクタ)の動作を示します。このメソッドは、主にオブジェクトの初期化処理を行います。

サンプルコードのOverrideクラスでは、new Override() でオブジェクトを作成した瞬間に__constructが自動実行されます。これにより、内部プロパティinternalMessageに初期メッセージが設定され、オブジェクト構築を示すメッセージがコンソールに出力されます。

このメソッドはシステムから自動的に呼び出されるため、引数なしで定義され、直接引数を渡すことはありません。また、初期設定が目的のため、特定の値を返しません(戻り値なし)。コードの最後にある$myObject->getStatus()で、コンストラクタにより設定された初期メッセージが正しく反映されていることを確認できます。

__constructメソッドは、newキーワードを使ってオブジェクトを生成した際に、自動で一度だけ実行される特別なメソッドです。このメソッドは、オブジェクトが持つべき初期値の設定や、オブジェクトを利用可能にするための初期化処理を行う役割を担います。

コンストラクタは戻り値を定義せず、値を返しても無視されますのでご注意ください。今回のサンプルコードのように引数なしで定義されている場合、オブジェクト生成時に外部から追加の値を渡すことはできません。コンストラクタ内でエラーが発生すると、オブジェクトが正しく生成されないため、確実な初期化処理を記述することが大切です。

関連コンテンツ

関連IT用語