[ PHP ] return $this; を効果的に(カッコつけて)使う

Pocket

男の子はカッコつけて当たり前です。恥ずかしがることはありません。じゃんじゃんカッコつけていきましょう。

さて、ここでは $this(自身のインスタンス)をリターン値に使用するサンプルコードを掲載しています。なんとなくカッコつけてる気になるのは、私がペッポコプラグラマだからでしょうか?

スポンサーリンク

$this(自身のインスタンス)をリターン値に使用することで、利用者側では視覚的にもすっきりとしたコーディングを行うことができるようになります。特に、順序を気にしなければいけないような場合には、効果を発揮すると思います。ただし、リターン値で結果を判断しなければいけないような部分では不向きです。

$this(自身のインスタンス)をリターン値とする

/**
 * 味気ないサンドイッチクラス
 */
class sandwich
{
    private $_completed = false;

    public function create($bread_num = 2, $beef_num = 1, $tomato_num = 1)
    {
        $this->_setBread($bread_num)    // パンをセット
             ->_setBeef($beef_num)      // 牛肉をセット
             ->_setTomato($tomato_num); // トマトをセット

        echo 'サンドイッチ完成' . PHP_EOL;
        $this->_completed = true;

        return $this;
    }

    public function eat()
    {
        if($this->_completed) {
            echo 'ごちそうさまでした' . PHP_EOL;

            // 食べたのでなくなった
            $this->_completed = false;
        } else {
            echo 'どこにある?' . PHP_EOL;
        }
        return $this;
    }

    private function _setBread($num)
    {
        /*
         * パンを準備した自身をリターン
         */
        return $this;
    }

    private function _setBeef($num)
    {
        /*
         * 牛肉をのせた自身をリターン
         */
        return $this;
    }

    private function _setTomato($num)
    {
        /*
         * トマトをのせた自身をリターン
         */
        return $this;
    }
}

// 使い方
$sandwich = new sandwich();
$sandwich->create()  // 作って
         ->eat()     // 食べて
         ->create()  // 作って
         ->eat()     // 食べて
         ->eat();    // 食べて

// 出力
//-------------------------------------
// サンドイッチ完成
// ごちそうさまでした
// サンドイッチ完成
// ごちそうさまでした
// どこにある?
//

コンストラクタでリターン値(メモ)

PHP では、コンストラクタでも($this に限らず)リターン値を返すようなコーディングを行ってもエラーとなりません。ただし、おもいっきり無視されます。why???

この部分は単なるメモです。おまけです。

class sandwich
{
    public function __construct()
    {
        return 2; // 無視される。エラーにならない。why?
    }
}
スポンサーリンク


Pocket

Leave a Comment

Your email address will not be published. Required fields are marked *