外部のパートナー企業から納めて頂いたコードで、疑問があります。
###前提
- PHP5
- ZendFramework1
- 普段はCakePHPを使っている :-)
MVCのコントローラにおいて、各メソッドで共通して呼び出すprivate関数の呼び出し方が、self::
で書かれていました。
class TestController extends Zend_Controller_Action { public function FooAction() { //パートナーさんが書かれたコード $ex = self::commonExample(); } public function BarAction() { //私の普段の書き方 $ex = $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点を論点にご教示頂けますと幸いです。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/01/17 05:09
2017/01/17 06:25