PHPは__construct()
、新しく作成されたオブジェクトのプロパティを設定するために使用します。私が理解していることから、これは実際にはコンストラクターではなく、メソッドです。なんで?
また、JavaやPythonのような一貫性のない言語の場合、コンストラクターが呼び出される前または後にオブジェクトがインスタンス化されますか?そして、これはPHPの方法とどう違うのですか?
ありがとう!
PHPは__construct()
、新しく作成されたオブジェクトのプロパティを設定するために使用します。私が理解していることから、これは実際にはコンストラクターではなく、メソッドです。なんで?
また、JavaやPythonのような一貫性のない言語の場合、コンストラクターが呼び出される前または後にオブジェクトがインスタンス化されますか?そして、これはPHPの方法とどう違うのですか?
ありがとう!
これらの言語は両方とも、コンストラクターを呼び出す前にインスタンス化します。this
Javaでは、Pythonでにアクセスできますself
。また、Javaでは、return型がないことを除けば、メソッドに似ています。Pythonでは、構文はメソッド(__init__
)の構文とまったく同じです。
これは実際にはマジックメソッドと呼ばれ、特定の「イベント」が自動的に呼び出されるメソッドです。マジックメソッドは、 PHPが持つイベントに最も近いものです。__constructは、クラスのインスタンス化のイベント時にPHPによって自動的に呼び出されます。
__construct
マジックメソッドに加えて、 __ destructexit()
マジックメソッドがあります。これは、またはが呼び出された場合でも、スクリプトがシャットダウンしているときに常に呼び出さdie()
れます。
複数のクラスを使用して、これらのさまざまなマジックメソッドを「遊んで」、__destruct
メソッドがどのような順序で実行されるかを理解することが役立つことがわかりました。
すべてのオブジェクト指向言語 (私が知る限り、すべての言語の専門家というわけではありません) では、オブジェクトが作成された後にコンストラクターが呼び出され、オブジェクトの内容が初期化されます。コンストラクター内のコードはオブジェクトを作成せず、作成プロセスに影響を与えることもありません[1]。
(メモリについて言及していないことに注意してください。C++ や Java などの言語では、「オブジェクトが作成された」とは、フィールドが占有するメモリが割り当てられたことを意味しますが、Python では、「オブジェクトが作成されました」とは、次のことを行う辞書があることを意味します。割り当てられたオブジェクトの属性を保持します)
私が知っているほとんどのオブジェクト指向言語では、コンストラクターもメソッドと非常によく似た構文を持っており、ほとんどの意味でコンストラクターをメソッドとして考えるのに概念的な困難は見られません (Python では、__init__
メソッドはあらゆる意味で文字通りメソッドです。新しいオブジェクトが作成された後に、ランタイム システムがそれを呼び出すプロトコルにすぎません)。
[1] Python には、オブジェクトの作成プロセスを制御できる機能が追加されています。ただし、__init__
メソッド (Java/PHP のコンストラクターに最も密接に対応する特別なメソッド) ではなく、__new__
.