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使ってみたい機能ですね!

 

  • profile

    どうも!管理人の8野郎です!

    コードを開くと上のほうはnamespaceのuseメソッドで埋め尽くされていて、
    自分で書いたコードなのに見るのが苦痛でした!
    これからはnamespace地獄から開放されるんですね!素晴らしい!
    しかしながら自分の開発は大半がhhvmを使っているので、グループ化の恵みはまだまだ受けられそうにありません! ( hhvm 3.11からPHP7の構文がサポートされました )

    ちなみに、このcupOF Interests( サイトの正式名 )もhhvmで動いてますよ!

この記事のカテゴリ

プログラミング

この記事のタグ

PHP , Laravel

Socialシェアボタン

スポンサーリンク