2009-10-06 11 views

答えて

2

を__serialize PHPに加えて、設計者はPythonを見ていました。

+5

@Click Upvote面白いことに、これを正解として選択しました。 PHP 5で関数className()の代わりに関数__construct()を使用するのはなぜですか? – Asaph

+1

本当に、私は本当に面白かったです。 Asaphの答えははるかに役立っています。 –

4

php5はもっとPythonに似ていたかったので。私の子供

Iの子供、...標準アクションのための標準的な方法を持っ

は、建設のように、合理的な解決策です。 C#クラスでは、クラスを拡張するときに、名前付きオブジェクトの代わりに基本クラスのコンストラクタを呼び出すためにbaseを使用するのと同じ理由があります。コードを簡略化し、メンテナンスを容易にします。

27

__マジックメソッド/関数は、一貫してPHPのテーマであるようです。 __construct()ClassName()よりもコンストラクタとして使用する利点の1つは、クラスの名前を変更した場合、コンストラクタを更新する必要はありません。

+2

'__autoload()'は、 '_construct()'または 'className()'を使用するかどうかに関係なく動作しますか? –

+1

C++とJavaがctor()/ dtor()メソッドのシグネチャを使用したがっています。 : -/ –

+0

@アップグレートをクリックしてください。 __autoload()は、使用されたコンストラクタのスタイルに注意してはいけません。 – Asaph

4

それは、例えば__get、__sleepのために2つのアンダースコアで始まる__destruct()メソッドおよびその他の特殊な方法で統一されているので、私の推測では、時間によってオブジェクト指向の機能がされていたということでしょう http://us2.php.net/manual/en/language.oop5.magic.php

1

これを行うことで、スーパークラス(ベースクラス)からそのコンストラクタを呼び出すことができます。これは、クラスツリーを再配置するだけですべてのクラスを更新する必要がないため、クラスツリーのメンテナンスに非常に便利です。

...すべてのクラスが同じコンストラクタ__construct()は、理論上は、コンストラクタを必要な定義なしにスーパークラスから継承できます。これは、中間抽象クラスがあるクラスツリーや、デフォルトのコンストラクタビヘイビアがクラスメタデータから完全に導出される目的Cのようなコンストラクトで意味があります。

0

古い質問ですが、誰も実際の質問にまだ実際に答えていないので、私は噛みます。

function className()はPHP4-style constructorです。

function __construct()はPHP5-style constructorです。

前者は非推奨であり、言語から削除される可能性があるため、後者を使用する必要があります。

また、前者は、パブリック/プライベートの可視性演算子など、さまざまなPHP5の概念を無視することもあれば、無視しないこともあります。シングルトンパターンやファクトリパターンを使用していない場合は、コンストラクタを非公開にしたいとは限りません。

関連する問題