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. PHPとし、クローンの代わりに、コンストラクタ
- 2. Hibernate 5シーケンスジェネレータは、シーケンスの代わりにデフォルトのhibernate.seqを使用するのはなぜですか?
- 3. なぜAssembly.LoadFromの代わりにAssembly.LoadFileを使用しますか?
- 4. idの代わりにclassnameを使ってdomNodeを検索するには?
- 5. RELEASEの代わりにNDEBUGを使用するのはなぜですか?
- 6. WireMockの代わりにMockWebServerを使用するのはなぜですか?
- 7. Symfonyプロキシの代わりにワニスを使用するのはなぜですか?
- 8. FragmentStatePagerAdapterの代わりにFragmentPagerAdapterを使用するのはなぜですか?
- 9. マルコフモデルの代わりにRNNを使用するのはなぜですか?
- 10. JRubyの代わりにRubyを使用することを検討しているのはなぜですか?
- 11. セットアップとティアダウンの代わりにコンストラクタとデストラクタを使用できますか?
- 12. なぜ私のスクリプトにPHP7の代わりにPHP5を使用しますか
- 13. なぜ `update_wrapper`の代わりに` wrap`をデコレータとして使うのですか?
- 14. JSONでhttp://の代わりにhttp:\/\ /を使用しているサイトがあるのはなぜですか?
- 15. C関数の代わりにポインタをパラメータとして使用するのはなぜですか?
- 16. guava:コンストラクタの代わりにメソッドcreate()を使用する理由
- 17. Pythonスレッドモジュールのクラスが、コンストラクタの代わりにファクトリ関数を公開するのはなぜですか?
- 18. なぜincqの代わりにlealを使用するのですか?
- 19. WCF/Silverlight:なぜクライアントの代わりにChannelFactoryを使用するのですか?
- 20. なぜJavaの代わりにClojureを使用するのですか
- 21. なぜwindow.locationの代わりにルーティングを使用するのですか?
- 22. なぜjasmine.createSpyの代わりにspyOnを使用するのですか?
- 23. なぜRabbitMQの代わりにCeleryを使用するのですか?
- 24. なぜtf.stackの代わりにtf.concatを使用するのですか?
- 25. なぜzImageの代わりにuImageを使用するのですか?
- 26. なぜSQLBRITEで、代わりにSQLiteを使用するのですか?
- 27. なぜAndroidのスタジオはカレンダーの代わりにCalendarContract.Calendarsを使用しますか?
- 28. なぜ、spをdpの代わりにすべて使用するのではないのですか?
- 29. C#では、なぜStreamWriterの代わりにTextWriterを使用できますか?
- 30. なぜ* headの代わりに** headが使用されていますか?
@Click Upvote面白いことに、これを正解として選択しました。 PHP 5で関数className()の代わりに関数__construct()を使用するのはなぜですか? – Asaph
本当に、私は本当に面白かったです。 Asaphの答えははるかに役立っています。 –