2012-06-15 5 views
5

クラスのインスタンスを使用して、悪い習慣とみなされる静的メソッドにアクセスしていますか?クラスのインスタンスを使用して、悪い習慣とみなされる静的メソッドにアクセスしていますか?

I.e.

$model = new MyClass(); 
$options = $model::getOptions(); 

VS

​​

$modelがいずれの場合にインスタンス化される一つのアプローチは、他のに好適であれば、私は思っています。)

+0

2番目の構文が無効です。: –

+0

@SiGanteng IDEはエラーが発生せず、実行されます。 – bcmcfc

+0

ok、my fault、申し訳ありません –

答えて

4

伝統的に最初の方法(クラスを指定します名前自体)は、Javaなどの他の言語との類似性が高くなります。

2番目はPHP(afaik)に固有のものです。 ::演算子は、インスタンスプロパティと静的プロパティの両方にピリオドが使用されるJavaとは異なり、式を曖昧にするために機能します。

2番目のオプションを使用してパフォーマンスの影響を確認することはできませんが、個人的な味覚/コーディングの基準になると思います。

結論

あなたのインスタンスの種類は、周囲のコードからすぐにクリアされている場合、番目のオプションのために行く方が簡単かもしれません(時にはクラス名はかなり大きなものとなります)。そうでない場合は、最初のオプションを最も明示的に使用してください。

3

それは、私は思う。インスタンス化のないコードを楽しんで、多くの幸せな年に静的メソッドをうまく使用することができますが、ある日、(それはどこに行くのでしょうか)の別の子孫クラスを呼び出すので、簡単な検索と置換の呼び出ししません。 )したがって、準備されたオブジェクトを使用することはより安全なルートです。

別の方法として、あなたはこのようなものを使用することができます

$className = 'MyClass'; 
$className::classyMethod1(); 
$className::classyMethod2(); 

を...しかし、それは時間とかなり混乱になることがあり、私が思う(とのみPHP 5.3+で使用可能です)

1

あなたは、静的な関数を呼び出すために余分な変数を必要とされていないため、

$options = MyClass::getOptions(); 

が実際に、より少ないメモリを無駄にされています。私は、この代替を考えています。

関連する問題