質問: $this->commonExample(); } private function commonExample() { /* メソッドで概ね共通する処理 */ } } ``` commonExampleは、コンボボックスの初期値のセットとかです。本当にメソッドごとに共通した部分をサブルーチンにしているだけです。`function init()`を使わないのは、全てのメソッドで呼び出すわけではないからですが、その点は今回の関係性がありません。 `self::` は、呼び出された同じクラスの中にあるものを指すという理解をしているのですが、コントローラではstaticで呼び出されるわけでもなく、継承するわけでもないので、私は`$this->`で呼び出していました。 ### 発生した疑問 今回においてはどちらでも同じ挙動をしますので、どちらが間違っているわけでもないと思いますが、メソッドを追加するにあたって、同じコードの中で、`self::`と`$this->`が混在しているのは気持ちが悪く、かといって無理解のまま`self::`に合わせるのも納得がいきません。 正直、どっちでもいい話だと思いますが、作法としてはどうなのかが気になって、質問させて頂きました。 私は、明確な必要性がない限りは、`$this->`でよいと思っていました。コントローラなので継承されることはないのですが、仮にサブルーチンがprivateではなくpublicのfunctionだったとして、継承を考えたとしても、明確な必要性がなく、擬似変数`$this->`を避ける理由があるようには認識していません。 staticで呼び出されるような場合には、擬似変数は使えませんが、コントローラがstaticで呼び出されることを考慮する必要はないと思いました。しかしその上で、例えば使い分けするよりサブルーチンの呼び出しは`self::`で統一するというのが一般的な作法、もしくは私の知識不足で非常識な疑問を抱いているのであるならば、今後はそのように是正させて頂こうとは思っています。 * サブルーチンの呼び出しは`self::`で行うのが一般的かどうか * 私が認識不足している`self::`を使うべき理由がないかどうか この2点を論点にご教示頂けますと幸いです。
回答: つい先日同じ質問を持ってました。 ここの表が理解しやすかったです。 PHPオブジェクト指向入門(前半):: 静的プロパティ / 静的メソッド / クラス定数 合わせて前後を読むと理解が深まるかと。 お作法的な選択もありそうですが、そちらは私では回答できないので、他の方から回答があるとイイのですが。。。