5

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

いえ

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

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

$modelどちらの場合もインスタンス化されますが、一方のアプローチが他方よりも好ましいかどうか疑問に思っています。)

4

3 に答える 3

4

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

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

2 番目のオプションを使用した場合のパフォーマンスへの影響はわかりませんが、個人の好みやコーディング基準によるものだと思います。

結論

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

于 2012-06-15T16:25:34.407 に答える
3

それは依存していると思います。インスタンス化のないコードを楽しんで、何年にもわたって静的メソッドを喜んで使用できますが、ある日、いくつかの呼び出しを別の子孫クラスに再ルーティングする必要があるため、単純な検索と置換の呼び出しはできません。しません。) したがって、準備されたオブジェクトを使用する方が安全なルートだと思います。

別の方法として、次のようなものを使用できます。

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

...しかし、それは時間の経過とともにかなり混乱する可能性があると思います(そしてPHP 5.3+でのみ使用可能です)

于 2012-06-15T16:27:18.330 に答える
1

私は、この代替案:

$options = MyClass::getOptions();

静的関数を呼び出すために余分な変数が必要ないため、実際にはメモリの浪費が少なくなります。

于 2012-06-15T16:39:08.680 に答える