PHP の糖衣構文

PHP の糖衣構文

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 の寄稿記事として執筆した記事を転載し、公開したものです。