PHP5でfunction className()
の代わりにfunction __construct()
を使用する理由は何ですか?PHP 5がclassName()の代わりに__contruct()をコンストラクタとして使用するのはなぜですか?
答えて
を__serialize PHPに加えて、設計者はPythonを見ていました。
php5はもっとPythonに似ていたかったので。私の子供
Iの子供、...標準アクションのための標準的な方法を持っ
は、建設のように、合理的な解決策です。 C#クラスでは、クラスを拡張するときに、名前付きオブジェクトの代わりに基本クラスのコンストラクタを呼び出すためにbase
を使用するのと同じ理由があります。コードを簡略化し、メンテナンスを容易にします。
__マジックメソッド/関数は、一貫してPHPのテーマであるようです。 __construct()
をClassName()
よりもコンストラクタとして使用する利点の1つは、クラスの名前を変更した場合、コンストラクタを更新する必要はありません。
'__autoload()'は、 '_construct()'または 'className()'を使用するかどうかに関係なく動作しますか? –
C++とJavaがctor()/ dtor()メソッドのシグネチャを使用したがっています。 : -/ –
@アップグレートをクリックしてください。 __autoload()は、使用されたコンストラクタのスタイルに注意してはいけません。 – Asaph
それは、例えば__get、__sleepのために2つのアンダースコアで始まる__destruct()メソッドおよびその他の特殊な方法で統一されているので、私の推測では、時間によってオブジェクト指向の機能がされていたということでしょう http://us2.php.net/manual/en/language.oop5.magic.php
これを行うことで、スーパークラス(ベースクラス)からそのコンストラクタを呼び出すことができます。これは、クラスツリーを再配置するだけですべてのクラスを更新する必要がないため、クラスツリーのメンテナンスに非常に便利です。
...すべてのクラスが同じコンストラクタ__construct()は、理論上は、コンストラクタを必要な定義なしにスーパークラスから継承できます。これは、中間抽象クラスがあるクラスツリーや、デフォルトのコンストラクタビヘイビアがクラスメタデータから完全に導出される目的Cのようなコンストラクトで意味があります。
古い質問ですが、誰も実際の質問にまだ実際に答えていないので、私は噛みます。
function className()はPHP4-style constructorです。
function __construct()はPHP5-style constructorです。
前者は非推奨であり、言語から削除される可能性があるため、後者を使用する必要があります。
また、前者は、パブリック/プライベートの可視性演算子など、さまざまなPHP5の概念を無視することもあれば、無視しないこともあります。シングルトンパターンやファクトリパターンを使用していない場合は、コンストラクタを非公開にしたいとは限りません。
- 1. なぜAssembly.LoadFromの代わりにAssembly.LoadFileを使用しますか?
- 2. JRubyの代わりにRubyを使用することを検討しているのはなぜですか?
- 3. RELEASEの代わりにNDEBUGを使用するのはなぜですか?
- 4. セットアップとティアダウンの代わりにコンストラクタとデストラクタを使用できますか?
- 5. guava:コンストラクタの代わりにメソッドcreate()を使用する理由
- 6. C関数の代わりにポインタをパラメータとして使用するのはなぜですか?
- 7. Pythonスレッドモジュールのクラスが、コンストラクタの代わりにファクトリ関数を公開するのはなぜですか?
- 8. WCF/Silverlight:なぜクライアントの代わりにChannelFactoryを使用するのですか?
- 9. なぜRabbitMQの代わりにCeleryを使用するのですか?
- 10. なぜJavaの代わりにClojureを使用するのですか
- 11. (メタタグを使用して)リダイレクトする代わりにサーブレットページをリフレッシュ/リロードするのはなぜですか?
- 12. VB6 COM +コンポーネントの代わりにPHPを使用しますか?
- 13. なぜmemo.LineはTStringListの代わりにTStringsを使用しますか?
- 14. ハッシュを削除するときに[]の代わりにa()を使用するのはなぜですか?
- 15. PHPは$ _SESSIONの代わりに$ _ENVを使用します
- 16. なぜVaadinでVerticalLayoutの代わりにFormLayoutを使用しますか?
- 17. PHPの代わりにPHPを使用する
- 18. なぜオーバーライドequals()メソッドのreturn文は、代わりの&&と||を使用する必要がありますか?
- 19. PHPでは@ issetの代わりに@を使用しています
- 20. MySQLの代わりにJSONを使用していますか?
- 21. sympyが `__init__`の代わりに` __new__`をオーバーライドするのはなぜですか?
- 22. Xcode 4.2がNSAutoreleasePoolの代わりにmain.mで@autoreleasepoolを使用するのはなぜですか?
- 23. MySQLがBIT(1)の代わりにBooleanをTINYINT(1)として解釈するのはなぜですか?
- 24. 新しいObject()の代わりに{}を使用し、新しいArray()の代わりに[]を使用し、新しいBoolean()の代わりにtrue/falseを使用するのはなぜですか?
- 25. 代わりにカスタムBeanのライフレイ・ユーザー・オブジェクトを使用するのはなぜ
- 26. なぜfopen()またはopen()がエラーコードを返す代わりにerrnoを使用するのですか?
- 27. なぜboost :: ice_orを||の代わりに使うのですか? enable_ifの&&の代わりにboost :: ice_andを使用しますか?
- 28. なぜwindow.showModalDialogは推奨されていませんか?代わりに何を使用するのですか?
- 29. PHP - ループの中にインクルードを使用する代わりに
- 30. JavaがUTF-8の代わりに変更されたUTF-8を使用するのはなぜですか?
@Click Upvote面白いことに、これを正解として選択しました。 PHP 5で関数className()の代わりに関数__construct()を使用するのはなぜですか? – Asaph
本当に、私は本当に面白かったです。 Asaphの答えははるかに役立っています。 –