2012-04-16 8 views
1

PHPは__construct()を使用して、新しく作成されたオブジェクトのプロパティを設定します。私が理解しているところから、それは実際にはコンストラクタではなくメソッドです。どうして?PHPコンストラクタはなぜメソッドですか?

また、JavaやPythonのような一貫性のない言語では、コンストラクタが呼び出される前または後にオブジェクトがインスタンス化されますか?そしてこれはPHPの方法とどのように違うのですか?

ありがとうございます!

+1

なぜそれがコンストラクタではありませんか?オブジェクトの作成時に自動的に呼び出されます。 – vikiiii

+2

オブジェクトにメモリを割り当てないため、コンストラクタではありません。 – kindall

+0

私が見た言語のほとんどで、コンストラクタは、技術的に何であるかにかかわらず、メソッドのように見え、振る舞います。 – joshuahealy

答えて

2

これらの言語はいずれも、コンストラクタを呼び出す前にインスタンス化します。 Javaでは、this、Python selfにアクセスできます。また、Javaでは、戻り値の型がない場合を除き、メソッドのようになります。 Pythonでは、構文はメソッド(__init__)の構文とまったく同じです。

+0

Pythonには '__new__'もあり、オブジェクトが作成される前に呼び出されます。 – agf

1

実際にはmagic methodと呼ばれ、特定の「イベント」を自動的に呼び出すメソッドです。 マジックメソッドは、イベントに最も近いもので、PHPにはというイベントがあります。 __constructは、クラスインスタンス化のイベントでPHPによって自動的に呼び出されます。 __constructマジックメソッドとともに

はスクリプトがシャットダウンしているときは常にexit()またはdie()が呼び出された場合でも、呼ばれ__destruct魔法の方法、です。

__destructメソッドの実行順序を知るために、複数のクラスを使用してこれらのさまざまな魔法のメソッドを "再生"することが有用であることがわかりました。すべてのオブジェクト指向言語で

+1

それでは、PHPのHPはHarry Potterの略ですか? – joshuahealy

+1

@appclay、いいえ、個人ホームページからの "ホームページ"。しかし、それ以上のことは恥ずかしいですか? –

+0

"*自動的に特定のイベントを呼び出す*。"あなたはどんな出来事について話していますか? – Lion

0

(私が知っていることを、私はほとんどそれらのすべてで専門家だ)後、コンストラクタがと呼ばれるオブジェクトが内容物のを初期化するために、作成されます。コンストラクタ内のコードはオブジェクトを作成しません。または、とにかく作成プロセスに影響を与えることができます[1]。

(私はメモリを参照していませんが、C++やJavaなどの言語では「オブジェクトが作成されました」はフィールドが占有するメモリを意味しますが、Pythonではオブジェクトが作成されています

私が知っているほとんどのオブジェクト指向言語では、コンストラクタもメソッドと非常によく似た構文を持っていますが、概念的には考えにくいものはありません。ほとんどの意味でのメソッド(Pythonの__init__メソッドは文字通りあらゆる意味でのメソッドであり、作成された後に新しいオブジェクトに対してランタイムシステムが呼び出すプロトコルだけです)。


[1] Pythonはあなたがオブジェクトの作成プロセスを制御をさせないことをさらに特徴としています。 __init__メソッド(これはJava/PHPのコンストラクタと最もよく似た特別なメソッド)では実行しません。__new__を使用します。

関連する問題