PHP7もRC5 ( リリース候補 )になり、いよいよリリース間近となっています。
( 2015年10月19日 現在 )
メージャーアップデートに伴い、様々な機能が追加されますが
その中の一つにnamespaceのグループ化があります。
ここで実際に筆者が管理システム側で使っているコードをサンプルに挙げてみましょう。
// PHP7以前のコード
namespace App\Modules\Cupof\Http\Controllers\Ajax\Article\Edit\Setter;
use App\Http\Controllers\Controller;
// repository
use App\Modules\Cupof\Repositories\Article\Edit\Setter\ArticleEditRepository;
// Requests 実際にはもっと沢山
use App\Modules\Cupof\Http\Requests\Article\Edit\UpdateTitleRequest;
use App\Modules\Cupof\Http\Requests\Article\Edit\UpdateProgressRequest;
use App\Modules\Cupof\Http\Requests\Article\Edit\UpdateCategoryRequest;
use App\Modules\Cupof\Http\Requests\Article\Edit\UpdateTagRequest;
use App\Modules\Cupof\Http\Requests\Article\Edit\ClearTagRequest;
use App\Modules\Cupof\Http\Requests\Article\Edit\UpdateMetaRequest;
use App\Modules\Cupof\Http\Requests\Article\Edit\UpdateOutlineRequest;
use App\Modules\Cupof\Http\Requests\Article\Edit\UpdateImageRequest;
use App\Modules\Cupof\Http\Requests\Article\Edit\UpdatePageRequest;
use App\Modules\Cupof\Http\Requests\Article\Edit\UpdateContentRequest;
class Ajax_ArticleEditController extends Controller
{
// do something
}
上記のコードは
LaravelのHTTP Requests機能を使ってPOSTリクエストのバリデーションを行っています。
POSTリクエスト毎に一つのRequestファイルで処理しているので、
同一のネームスペース内の沢山のファイルがインポートされています。
管理システム等の大規模なシステムを作っていると、
この様になることも珍しくないと思うのは私だけでしょうか ...
続いてはPHP7から追加されるuseのグループ化を使ってみましょう。
// PHP7以降のコード
namespace App\Modules\Cupof\Http\Controllers\Ajax\Article\Edit\Setter;
use App\Http\Controllers\Controller;
// repository
use App\Modules\Cupof\Repositories\Article\Edit\Setter\ArticleEditRepository;
// Requests
// namespaceのグループ化 *PHP7から利用可能
use App\Modules\Cupof\Http\Requests\Article\Edit\{
UpdateTitleRequest,
UpdateProgressRequest,
UpdateCategoryRequest,
UpdateCategoryRequest,
UpdateTagRequest,
ClearTagRequest,
UpdateMetaRequest,
UpdateOutlineRequest,
UpdateImageRequest,
UpdatePageRequest,
UpdateContentRequest
};
class Ajax_ArticleEditController extends Controller
{
// do something
}
" Requests "の部分がひと目でわかる位スッキリしました。
「火を見るよりも明らか」とは まさにこの事ですね。
サンプルでは同一のnamespace内でグループ化していますが、
下記の様な書き方も出来るようです。
// PHP 公式のサンプルコード
// 以前のバージョンのコード
use some\namespace\ClassA;
use some\namespace\ClassB;
use some\namespace\ClassC as C;
use function some\namespace\fn_a;
use function some\namespace\fn_b;
use function some\namespace\fn_c;
use const some\namespace\ConstA;
use const some\namespace\ConstB;
use const some\namespace\ConstC;
// PHP 7 以降のコード
use some\namespace\{ClassA, ClassB, ClassC as C};
use function some\namespace\{fn_a, fn_b, fn_c};
use const some\namespace\{ConstA, ConstB, ConstC};
公式のサンプルを見る限りではtraitのuseメソッドにも対応しているのでしょうか?
PHP7がリリースされたら、ゼヒ×2使ってみたい機能ですね!