「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > 複数のコンストラクターを使用せずに、PHP クラスで複数の初期化シナリオを処理するにはどうすればよいでしょうか?

複数のコンストラクターを使用せずに、PHP クラスで複数の初期化シナリオを処理するにはどうすればよいでしょうか?

2024 年 11 月 24 日に公開
ブラウズ:395

How Can You Handle Multiple Initialization Scenarios in PHP Classes Without Multiple Constructors?

PHP の複数のコンストラクター

PHP では、クラス内で異なる引数シグネチャを持つ複数のコンストラクターを許可できません。これは、さまざまなシナリオで個別の初期化プロセスが必要な場合に問題が生じます。

1 つのアプローチは、2 つのコンストラクター メソッドを定義することです。

class Student {
    public function __construct($id) {
        $this->id = $id;
    }

    public function __construct(array $row_from_database) {
        $this->id = $row_from_database['id'];
        $this->name = $row_from_database['name'];
    }
}

ただし、このアプローチは PHP のコンストラクター構文規則に違反します。

この制限を回避するための一般的な解決策は、代わりに静的ファクトリー メソッドを作成することです。

class Student {
    public function __construct() {
        // Allocate resources here
    }

    public static function withID($id) {
        $student = new self();
        $student->id = $id;
        return $student;
    }

    public static function withRow(array $row) {
        $student = new self();
        $student->id = $row['id'];
        $student->name = $row['name'];
        return $student;
    }
}

この手法では、コンストラクターの代わりに静的メソッドを通じて初期化が実行されます。

$studentWithID = Student::withID(42);
$studentWithRow = Student::withRow(['id' => 42, 'name' => 'John']);

静的ファクトリ メソッドは、次の条件を遵守しながら、複数の初期化シナリオに対処する柔軟で保守可能な方法を提供します。 PHP のクラス設計原則。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3