2

Codeigniterのいくつかのコアファイルを調べているところ、オブジェクトに挿入するのではなく、コアクラスのどこかにconfigクラスのインスタンスを取得するなど、プロシージャル関数と呼ばれるものがいたるところに散在していることがわかります。ただします

$config =& get_config();

私は専門家ではありませんが、それは悪いことではありませんか?私には、アプリケーションに不要なグローバル状態を持たせるように思えます。

私が見る限り、それは次のようなことをするのとほぼ同じです

$config = App::loadClass('config');

それを最初の方法よりも2番目の方法で悪いですか?Appこれは、クラスが存在する(そして配置される)必要がある2番目の方法で呼び出す場合、特定のクラスが存在する必要がなく、クラスファイルを含める必要がないため、要件が少ないため、最初の方法で呼び出す場合があるためだと思います。

私は独自のフレームワークを作成しており、これまで静的なものの使用を避けてきましたが、主要なフレームワークのコードを調べてアイデアを探したり、静的なものをあちこちで見たりするのを手伝うと、なぜだろうか?

主要なフレームワークはもう少しうまくコーディングされると思いますか、あるいはグローバルなメソッドを使用することは、多くの人がそれらをあなたが思うものであると理解するほど有害ではないと思いますか?

私のフレームワークでは、この$configオブジェクトを多くのクラスとオブジェクトに$logger注入する必要があり$messages/$languageます。私は依存性注入コンテナとファクトリを使用していますが、それでも実行するだけに比べて少し苦痛です

$config = App::loadClass('config');
$someSetting = $config->setting('some.setting');
Logger::write('debug', 'some message');

静的メソッドを使用する場合は、手続き型メソッド(Codeigniterの例)またはクラスに埋め込まれたメソッドを使用する必要がありますか?または、絶対に使用しないことを強くお勧めしますか?

ご意見をいただければ幸いです。

4

2 に答える 2

2

私は専門家ではありませんが、それは悪いことではありませんか?私には、アプリケーションに不要なグローバル状態を持たせるように思えます。

正しい。これは避けるべきです。グローバルな状態を導入するだけでなく、strict警告を発します。

厳格な基準:変数のみを参照によって割り当てる必要があります...

それを最初の方法よりも2番目の方法で悪いですか?少なくとも「厳格な基準」の警告は表示されないので、もっと悪いとは思わないでください。しかし、それでもあなたは本当にこれを避けたいでしょう。>私は独自のフレームワークを作成しており、これまで静的なものの使用を避けてきましたが、主要なフレームワークのコードを調べてアイデアを探したり、静的なものをあちこちで見たりするのを手伝うと、なぜだろうか?これは、世の中で最も人気のあるフレームワークがひどいという事実のためです。彼らは悪いコーディング慣行を導入するだけでなく、MVC構造を使用していることもしばしば教えてくれます(ほとんどは明らかにそうではありません)。>主要なフレームワークはもう少しうまくコーディングされると思いますか、グローバルなメソッドを使用することは、多くの人がそれらを自分の考えと見なすほど有害ではないと思いますか?繰り返しますが、これらのフレームワークはWTFでいっぱいです。人気のあるフレームワークの1つを調べたいと本当に思っている場合は、Symfony2またはZendFW 2を調べる必要があります。これらがすべて正しい方法で実行されるからではなく、(人気のあるものの中で)最高のimhoだからです。>私のフレームワークでは、この$configオブジェクトを多くのクラスと$loggerオブジェクト、$ messages /$languageなどに挿入する必要があります。依存性注入はこれを解決する正しい方法です(少なくともOOPアプローチを使用する場合)。ただし、クラスに多くの依存関係がある場合は、しばらく停止して、おそらくクラスがやりすぎているという事実について考えなければならない場合があります。別名、彼らには[責任が多すぎる](http://en.wikipedia.org/wiki/Single_responsibility_principle)があります。>もし私が m静的メソッドを使用する場合は、手続き型メソッド(Codeigniterの例)またはクラスに埋め込まれたメソッドを使用する必要がありますか?または、絶対に使用しないことを強くお勧めしますか?両方に対して強くアドバイスします。すでに述べたように、グローバルな状態を紹介します。テストを苦痛にします。そして、OOPよりも手続き型プログラミングと関係があります。*PS私はあなたに私の意見で2つの最高のFWを与えています。CodeIgniterとCakeが最悪であることを知りたい場合。*この投稿を終了するには、[PHPチャットルーム](https://chat.stackoverflow.com/transcript/11?m=6055399#6055399)からの[ Lusitanian](https://chat.stackoverflow.com/users/1477526/lusitanian):> * Microframework *(n):少量のがらくた。*フレームワーク*(n):大量のがらくたも参照してください。すでに述べたように、グローバルな状態を紹介します。テストを苦痛にします。そして、OOPよりも手続き型プログラミングと関係があります。*PS私はあなたに私の意見で2つの最高のFWを与えています。CodeIgniterとCakeが最悪であることを知りたい場合。*この投稿を終了するには、[PHPチャットルーム](https://chat.stackoverflow.com/transcript/11?m=6055399#6055399)からの[ Lusitanian](https://chat.stackoverflow.com/users/1477526/lusitanian):> * Microframework *(n):少量のがらくた。*フレームワーク*(n):大量のがらくたも参照してください。すでに述べたように、グローバルな状態を紹介します。テストを苦痛にします。そして、OOPよりも手続き型プログラミングと関係があります。*PS私はあなたに私の意見で2つの最高のFWを与えています。CodeIgniterとCakeが最悪であることを知りたい場合。*この投稿を終了するには、[PHPチャットルーム](https://chat.stackoverflow.com/transcript/11?m=6055399#6055399)からの[ Lusitanian](https://chat.stackoverflow.com/users/1477526/lusitanian):> * Microframework *(n):少量のがらくた。*フレームワーク*(n):大量のがらくたも参照してください。//chat.stackoverflow.com/transcript/11?m=6055399#6055399)by [Lusitanian](https://chat.stackoverflow.com/users/1477526/lusitanian):> * Microframework *(n):小さながらくたの量。*フレームワーク*(n):大量のがらくたも参照してください。//chat.stackoverflow.com/transcript/11?m=6055399#6055399)by [Lusitanian](https://chat.stackoverflow.com/users/1477526/lusitanian):> * Microframework *(n):小さながらくたの量。*フレームワーク*(n):大量のがらくたも参照してください。
于 2013-01-06T16:27:15.497 に答える
1

私の意見では、CodeIgniterは低品質のPHPフレームワークであり、たとえばZendFrameworkやSymfonyの下にあります。また、静的関数はOOPで特定の役割を果たしていると思います。たとえば、レジ​​ストリパターンを実装するときや、ログなどに使用できます。手続き型関数に関しては、OOPアプリケーションで使用しないことを強くお勧めします。

于 2013-01-06T15:49:36.903 に答える