あなたの2つの例は、実際には同等のように見えるかもしれませんが、単一の(あなた、今、現在の)パースペクティブからしか見えません。この例では
class Person { // First case : using the constructor
public function __construct($person) {
echo $person;
}
}
// ----------------------------------------------------------------
$person = new Person('Name');
は、あなたはそれが非常に明確なクラス
Person
(またはそのサブクラスの1つ)
のそれぞれとすべてのオブジェクトがとすぐに、それが作成される名前を与えなければならないことを確認してください。いつでも名前のない
Person
はありません。これは、ある意味でコードを共有している場合には、自分自身に課した設計上の制約です(クラス
Person
のオブジェクトを作成する場合)。この制約に違反しようとすると、PHPは明示的なエラー/警告メッセージとともにハングします。 (デモ:
https://3v4l.org/hCXZ8)
class Person { // Second case : no constructor (equivalent to an empty constructor)
public function name($name) {
echo $name;
}
}
// ----------------------------------------------------------------
$person = new Person();
$person->name('Name');
これは、異なる獣です:あなたは、クラスPerson
のオブジェクトを作成することができ、あなたが名前を表示することができます。 Person
を作成して、名前をまったく表示することもできません。何らかの理由でクラスコードに目を向けることができない場合は、実際にはできることは分かりません(各クラスに個別のファイルを与えるのが一般的です)。両方の例で
これらは、2つの異なる視点(彼らも互いに通信することができない二つの異なる人々ことができると思います)ですので、私は、クラス宣言と使用の間にコメント行を描きました。クラス作成者として、制約を厳密にあなたが生成できる最も明白なコードに変換します。クラスユーザーは、使用しているクラスの複雑さを理解するのに時間を浪費したくなくても構いません。複雑さを最小限に抑えながらオブジェクトを作成し、最小のオーバーヘッドと学習曲線で機能を活用し、ビジネスと
マニュアル:[コンストラクタとデストラクタ](http://php.net/manual/en/language.oop5.decon.php) –
コンストラクタは、オブジェクトを作成する際に最初に必要な動作を定義するだけです。 – Kazz
違いを見ることはできませんか? 1つは構築時に引数を渡し、もう1つは後で別のインスタンスメソッドに渡します。かなり明確な違いはIMO。なぜそれが違うと思うのかを明確にしたいかもしれません。 – deceze