PHP のコンストラクターのオーバーロード: 最適な解決策
PHP では、単一のクラスでさまざまな引数シグネチャーを持つ複数のコンストラクターを宣言することは実現できません。ただし、この課題に対処する実用的な回避策があります。
次のシナリオを検討してください:
class Student { protected $id; protected $name; // etc. public function __construct($id) { $this->id = $id; // other members remain uninitialized } public function __construct($row_from_database) { $this->id = $row_from_database->id; $this->name = $row_from_database->name; // etc. } }
この問題に取り組むには、次のアプローチをお勧めします:
<?php class Student { public function __construct() { // allocate necessary resources } public static function withID($id) { $instance = new self(); $instance->loadByID($id); return $instance; } public static function withRow(array $row) { $instance = new self(); $instance->fill($row); return $instance; } protected function loadByID($id) { // fetch data from database $row = my_awesome_db_access_stuff($id); $this->fill($row); } protected function fill(array $row) { // populate properties from array } } ?>
このソリューションでは、複数のコンストラクターを作成する代わりに、静的ヘルパー メソッドが使用されます。これらのメソッドを呼び出すことで、新しい Student インスタンスを作成し、特定の値で初期化できます。
// Create a student with a known ID $student = Student::withID($id); // Create a student using a database row array $student = Student::withRow($row);
このアプローチにより、単一の PHP クラスに複数のコンストラクターがあることに伴う潜在的なコーディングの複雑さとメンテナンスの課題が回避されます。
以上がPHP でコンストラクターのオーバーロード機能を実現するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。