1. 本記事のポイント
- PHPのコンストラクタの基本構文と役割を整理
- プロパティへの値の設定と初期化のパターンを紹介
- 型宣言付きプロパティやプロモーション構文の使い方も解説
2. PHPのコンストラクタとプロパティとは?
PHPにおける「コンストラクタ」とは、クラスのインスタンス生成時に自動で呼び出される特殊なメソッド(__construct()
)です。主に、オブジェクトの初期状態を定義する目的で利用されます。
一方「プロパティ」は、クラスの内部に保持される変数で、インスタンスごとに異なる状態(データ)を保持するために使われます。
この2つは密接に関係しており、コンストラクタ内でプロパティに値をセットするのが一般的な初期化手法です。特に、PHP 7.4以降では型付きプロパティ、PHP 8.0以降では「コンストラクタプロモーション」という記法が導入され、コードがより簡潔に記述できるようになりました。
実務では、フォームデータやAPIレスポンスなどの初期値をプロパティに格納する際に、これらの構文が多用されます。
3. 詳細解説
基本的なプロパティとコンストラクタの使い方
最も基本的なパターンとして、明示的にプロパティを定義し、コンストラクタ内で代入します。
<?php
class User {
public string $name;
public int $age;
// コンストラクタ
public function __construct(string $name, int $age) {
$this->name = $name; // プロパティへ代入
$this->age = $age;
}
}
$user = new User("Taro", 25);
echo $user->name; // 出力: Taro
echo $user->age; // 出力: 25
このように、$this->プロパティ名
の形でアクセスします。
コンストラクタプロモーションによる簡略化(PHP 8.0以降)
PHP 8.0以降では、コンストラクタ内でのプロパティ定義と代入を同時に行う記法が使えます。
<?php
class Product {
public function __construct(
public string $title,
public float $price
) {}
}
$product = new Product("Book", 1200.0);
echo $product->title; // 出力: Book
echo $product->price; // 出力: 1200
コード量を減らしたい場合に有効ですが、複雑なロジックを伴う初期化には不向きです。
privateやprotectedを使ったカプセル化
情報隠蔽の観点から、プロパティを private
や protected
にし、アクセサメソッド(getter/setter)を使うこともあります。
<?php
class Employee {
private string $name;
public function __construct(string $name) {
$this->name = $name;
}
public function getName(): string {
return $this->name;
}
}
$emp = new Employee("Hanako");
echo $emp->getName(); // 出力: Hanako
セキュリティや再代入制御が必要な場面で採用されます。
4. よくあるミス・誤解・落とし穴
- PHP 7.4未満では型付きプロパティが使えないため、バージョンに注意が必要です。
- コンストラクタプロモーションでは、
private
などのアクセス修飾子を明記しないとpublic
扱いになります。 - プロパティを定義せずに
$this->prop = xxx
とすると「未定義プロパティ」として警告が出ることがあります(特にstrictモードで注意)。 - プロパティ名のスペルミスや
$this
の書き忘れも典型的なミスです。
これらのミスは、IDEの補完や型検査を活用することで未然に防ぐことができます。
5. まとめ
PHPにおけるコンストラクタとプロパティは、オブジェクト指向設計の基本的な構成要素です。初期化処理を明確にし、プロパティの適切な公開レベルを設定することで、意図しない動作を防ぐことができます。
PHP 8.0以降のプロモーション構文を活用すれば、コードの記述量を削減しつつ、可読性も保つことが可能です。用途や保守性に応じて使い分けましょう。