LoginSignup
9
10

More than 3 years have passed since last update.

【PHP】PHPでメソッドチェーンを実装する

Posted at

はじめに

Laravelとかクエリビルダを使っていると、以下ようなのコードをよく見かけると思います。

$user = DB::table('users')
            ->where('name', 'John')
            ->first();

こちらのコード、大変読みやすくないですか??
usersテーブルのnameJohnのレコードの1つを所得するというのが、直感で理解できます。
「呼び出し元が見やすいことコードを書くように心がけたい。」そう感じている、Webエンジニア2年生なのです。

メソッドチェーン

今日は、->を使ってメソッドチェーンを実装しようというお話です。

Calculator.php
class Calculator {

    private $result;

    public static function create(int $int): Calculator {
        return new Calculator($int);
    }

    private function __construct(int $int) {
        $this->result = $int;
    }

    public function plus($int): Calculator {
        $this->result += $int;
        return $this;
    }

    public function minus($int): Calculator {
        $this->result -= $int;
        return $this;
    }

    public function getResult(): int {
        return $this->result;
    }
}
main.php
$result= Calculator::create(10)
                    ->plus(5)
                    ->minus(7)
                    ->getResult();
var_dump($result); // int(8)

ポイント

  • plus(), minus()関数内でreturn $thisをしている。つまり自身のインスタンスを返却している。
  • getReasult()関数で、プロパティを返却している。

メリット

  • 呼び出し元のコードが読みやすくなる。

どんな時に使うのか

  • ある値に対して、同属の処理を行いたい時。今回でいうと、plus(), minus()

補足

  • create()staticにし、その関数内でnewをすることで、呼び出し元でnewをしなくて良くなるため、可読性が上がる
  • __constructorprivateすることで、呼び出し元でnewできなくしている
9
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
10