PHPは__construct()
を使用して、新しく作成されたオブジェクトのプロパティを設定します。私が理解しているところから、それは実際にはコンストラクタではなくメソッドです。どうして?PHPコンストラクタはなぜメソッドですか?
また、JavaやPythonのような一貫性のない言語では、コンストラクタが呼び出される前または後にオブジェクトがインスタンス化されますか?そしてこれはPHPの方法とどのように違うのですか?
ありがとうございます!
PHPは__construct()
を使用して、新しく作成されたオブジェクトのプロパティを設定します。私が理解しているところから、それは実際にはコンストラクタではなくメソッドです。どうして?PHPコンストラクタはなぜメソッドですか?
また、JavaやPythonのような一貫性のない言語では、コンストラクタが呼び出される前または後にオブジェクトがインスタンス化されますか?そしてこれはPHPの方法とどのように違うのですか?
ありがとうございます!
これらの言語はいずれも、コンストラクタを呼び出す前にインスタンス化します。 Javaでは、this
、Python self
にアクセスできます。また、Javaでは、戻り値の型がない場合を除き、メソッドのようになります。 Pythonでは、構文はメソッド(__init__
)の構文とまったく同じです。
Pythonには '__new__'もあり、オブジェクトが作成される前に呼び出されます。 – agf
実際にはmagic methodと呼ばれ、特定の「イベント」を自動的に呼び出すメソッドです。 マジックメソッドは、イベントに最も近いもので、PHPにはというイベントがあります。 __constructは、クラスインスタンス化のイベントでPHPによって自動的に呼び出されます。 __construct
マジックメソッドとともに
はスクリプトがシャットダウンしているときは常にexit()
またはdie()
が呼び出された場合でも、呼ばれ__destruct魔法の方法、です。
__destruct
メソッドの実行順序を知るために、複数のクラスを使用してこれらのさまざまな魔法のメソッドを "再生"することが有用であることがわかりました。すべてのオブジェクト指向言語で
それでは、PHPのHPはHarry Potterの略ですか? – joshuahealy
@appclay、いいえ、個人ホームページからの "ホームページ"。しかし、それ以上のことは恥ずかしいですか? –
"*自動的に特定のイベントを呼び出す*。"あなたはどんな出来事について話していますか? – Lion
(私が知っていることを、私はほとんどそれらのすべてで専門家だ)後、コンストラクタがと呼ばれるオブジェクトが内容物のを初期化するために、作成されます。コンストラクタ内のコードはオブジェクトを作成しません。または、とにかく作成プロセスに影響を与えることができます[1]。
(私はメモリを参照していませんが、C++やJavaなどの言語では「オブジェクトが作成されました」はフィールドが占有するメモリを意味しますが、Pythonではオブジェクトが作成されています
私が知っているほとんどのオブジェクト指向言語では、コンストラクタもメソッドと非常によく似た構文を持っていますが、概念的には考えにくいものはありません。ほとんどの意味でのメソッド(Pythonの__init__
メソッドは文字通りあらゆる意味でのメソッドであり、作成された後に新しいオブジェクトに対してランタイムシステムが呼び出すプロトコルだけです)。
[1] Pythonはあなたがオブジェクトの作成プロセスを制御をさせないことをさらに特徴としています。 __init__
メソッド(これはJava/PHPのコンストラクタと最もよく似た特別なメソッド)では実行しません。__new__
を使用します。
なぜそれがコンストラクタではありませんか?オブジェクトの作成時に自動的に呼び出されます。 – vikiiii
オブジェクトにメモリを割り当てないため、コンストラクタではありません。 – kindall
私が見た言語のほとんどで、コンストラクタは、技術的に何であるかにかかわらず、メソッドのように見え、振る舞います。 – joshuahealy