PHP 5.6 は安定版として長い間に使われています。 しかし、新しい PHP バージョンのリリースとともに、たくさん糖衣構文が出てきました。 昔非常に面倒なコーティングは、その糖衣構文に代替され、シンプルになりました。
糖衣構文とは
糖衣構文(とういこうぶん、syntactic sugar)は、 プログラミング言語において、読み書きのしやすさのために導入される書き方であり、 複雑でわかりにくい書き方と全く同じ意味になるものを、 よりシンプルでわかりやすい書き方で書くことができるもののことである。- Wikipedia
::class
Laravel のプロジェクトをよくコーティングする方は、::class
のような書き方がよく見かけると思います。
<?php
'providers' => [
/*
* Laravel Framework Service Providers...
*/
Illuminate\Auth\AuthServiceProvider::class,
Illuminate\Broadcasting\BroadcastServiceProvider::class,
Illuminate\Bus\BusServiceProvider::class,
Illuminate\Cache\CacheServiceProvider::class,
Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class,
Illuminate\Cookie\CookieServiceProvider::class,
?>
Laravel 5.1 の中から ::class
という書き方は色んなところに使われています。 特に app\config.php
ファイルの中、昔 string
型で書かれた ServiceProvider は、現在、すべて ::class
に変わりましたね。 恐らく、IDE によく認識されるためだと思います。
::class
を使って、クラスの Full Name が string
型で取得できます。 例えば、ClassName クラスの完全修飾名を文字列で取得するには、ClassName::class とします。
<?php
AuthServiceProvider::class; // => 'AuthServiceProvider'
Illuminate\Auth\AuthServiceProvider::class; // => 'Illuminate\Auth\AuthServiceProvider'
use Illuminate\Auth\AuthServiceProvider;
AuthServiceProvider::class; // => 'Illuminate\Auth\AuthServiceProvider'
?>
.. (splat)
これは Ruby から「盗んだ」技術です。 这个是从 Ruby 借鉴过来的。Ruby の方と比べたら、少し足りないが、function
の中で使用すると、便利になるのです。
<?php
// 従来:
function test($param1, $param2 = null, $param3 = null) {
$params = func_get_args();
var_dump($params);
}
test(1,2,3); // prints [1,2,3]
test(1,2); // prints [1,2]
test(1); // prints [1]
// 現在:
function test($param1, ...$rest) {
var_dump($rest);
}
test(1,2,3); // $rest = [2,3];
?>
更に、こういう書き方もある。
<?php
$rest = [1,2,3,4];
function add($param1, $param2, $param3, $param4) {
return $param1 + $param2 + $param3 + $param4;
}
add(...$rest); // 10
?>
?: (short hand ternary)
通常、三項演算子の書き方はこうなります。
<?php
$result = $param ? $param : 'default';
?>
$param
が null
ではない場合は、$param
を使い、null
の場合は、'default'
を使います。
しかし、糖衣構文を使うと、同じことができます。
<?php
$result = $param ?: 'default';
?>
もう長いソースを書かなくてもいいですね。
※本記事は『日本語ドキュメント作成スタイル基準規約』に基づいて作成されています
※本記事は弊社社員の呉傑が Lindelin.org の寄稿記事として執筆した記事を転載し、公開したものです。