クラスメソッドとインスタンスメソッドの使い分けがよく理解出来ていないのですが、どなたか私がこれらの違いについて理解を深めるために、その違いをご教授頂けないでしょうか?
PHPで普段はWebのプログラムをフレームワークを使って書いているのですが、DBへのデータのやり取りは全て、クラスメソッドとして定義してしまっています。
例えば、「static public getPostById()」みたいな感じで。
自分が気付いていないだけかもしれませんが、実際、DBとのやりとりに関するメソッドは全てクラスメソッドとして書いていても問題が特に無いように感じています。
なので、自分としては「全部、クラスメソッドでも大丈夫なんじゃないか?その方が毎回インスタンス化しなくても良いし。」と思ってしまう訳ですが、これらの使い分けというか違いについて教えて頂けないでしょうか?
ちなみに、自分がなんとなく感じている違いや使い分けはこれらです。
- インスタンスメソッドはインスタンスがあって初めて、使えるもの。
対してクラスメソッドはクラスそのものに属するメソッドなので、インスタンスがあるなしに関わらず使えるもの。
- インスタンスメソッドはインスタンスを生成する時にインスタンス変数を好きなように設定出来るので、個々のインスタンスがそれぞれ違う値を使って、インスタンスメソッドを実行出来るようになる(?)
それがクラスメソッドには無いメリットを何らかのかたちで生み出すことが出来る???例えば、個々のインスタンス毎に異なる値(変数)を持たせる必要がある場合はインスタンスメソッドとして定義すると良いとか。
- クラスメソッドは基本的にpublicで定義する(?)
オブジェクト指向を理解して良いコードをかけるようになりたいのですが、
いろいろと混乱してしまいます。
経験豊富な先輩方、よろしければご教授頂ければ有り難いですm(_ _)m
みんなの回答 2 件
1と2は理解してる通りでいいと思います。ただ全部クラスメソッドだと、例えば複数のDBに接続する場合は困ると思います。それぞれにインスタンスを生成し、プロパティに接続情報を持たせるのが普通かと。世に出回っているDBインターフェイスクラスはほとんどそうなっています。
3はそうではなく、汎用的に使えるようなメソッドは public、クラス内だけで使用するようなものは private(protected) とするのが良いのでは。
レガシー感あるけど、トピ主にはシングルトンと静的遅延束縛についても調べてみてほしいな。
関連するトピックス