ログ日記

作業ログと日記とメモ

流れるようなインターフェースをtraitで

ぼんやり思ったことのメモ。


たとえばDB接続なら

<?php
$item = Item::select()
              ->from('item')
              ->join('category')
                ->on()->over(['category.status' => 'item.status'])
              ->like(['name' => 'my item'])
              ->order('code')
              ->offset(100)
              ->limit(10)
              ->get();

とかやりたい。
今までさくっと実装しようとすると、メソッド全部入りのDBクラスを作れば良かったんだけども、traitを使うと各メソッドを細切れで作っておいてtraitで

<?php
class CalledSelect
{
  use Join;
  use Where;
  use Order;
  use Get;
  use Offset;
}
class CalledFrom
{
  use Join;
  use On;
  use Where;
  use Order;
  use Get;
  use Offset;
}
class CalledWhere
{
  use Order;
  use Get;
  use Offset;
}

のようにすると、選べるメソッドが制限されて書きやすいんじゃないかと。PHP7では戻り値も書けるようだし。( https://wiki.php.net/rfc/return_types )
まあ今はIDE使ってないし恩恵ないんだけども。