はじめに
SLスタジオでPHP・WEB開発を独学中のアラフィフ主婦の忘備録です。
クラス-コンストラクタ
インスタンス生成時に、プロパティへの値の代入や、メソッドを実行したい場合があります。PHPでは、__construct というメソッドを実装することで、インスタンス生成時に処理を実行することができます。
サンプルソース
変数名など一部変更しています。
class Person
{
public $name;
public $age;
// コンストラクタの定義
public function __construct($name, $age)
{
echo "インスタンスが生成されました。\n";
//渡された引数をプロパティへ代入
$this->name = $name;
$this->age = $age;
}
public function showName()
{
echo "名前: " . $this->name;
}
}
$person = new Person("きらり", 28);
$person->showName();
出力結果
インスタンスが生成されました。
名前: きらり
疑問点
インスタンス生成時のPerson("きらり", 28)
2つの引数はクラスの中の__construct($name, $age)
に引き渡されているのだから
// ▼これって宣言する必要ないのでは?
public $name;
public $age;
実際なくても出力結果は同じ
じゃあなぜわざわざ宣言しているの?
以下のような利点があるからです。
-
コードの可読性とメンテナンス性:
プロパティを宣言しておくと、クラスがどのようなデータを持っているのかが明確になり、後でコードを読む際にわかりやすくなります。 -
静的解析ツールやIDEのサポート:
IDE(統合開発環境)や静的解析ツールは、明示的に宣言されたプロパティを元にコード補完やエラーチェックを行うことができます。プロパティを宣言しないと、コード補完が機能しなかったり、ミスを検知しづらくなることがあります。 -
厳密なプロパティの管理:
プロパティを明示的に宣言しておくことで、クラスに存在しないプロパティに誤ってアクセスした場合にエラーが発生するなど、バグを防ぎやすくなります。動的にプロパティを追加できると、誤ったプロパティ名で値を設定した場合に気づきにくくなる可能性があります。
まとめ
したがって、コードは動作するものの、ベストプラクティスとしてはプロパティを明示的に宣言することが推奨されます。