PHP7.3の変更点

はじめに

こんにちは。
GMOアドマーケティングのK.Kです。

前回のPHP7.2の記事に引き続き、今回はPHP7.3の変更点に関して掻い摘んでご紹介させて頂きます。

このエントリーは、GMOアドマーケティング Advent Calendar 2018 の 【12/2】 の記事です。GMOアドマーケティングとしては初のAdvent Calendar参戦です。はじめにこんにちは。18年新卒で入社いたしました、GMOアドマーケティングのK.Kです。新卒研修を終え、現在はゴリゴリ業務に取り組んでいます。今回の記事では、弊社のプロジェクトGMOSSPのPHPのバージョンを、PHP7.0からPHP 7.2にバージョンアップしましたので、バージョンアップの際の対応内容に関してご紹介させていただきます。(引用元|https://secure.php.net/download-logo...

php
(引用元|https://secure.php.net/download-logos.php


目次

  1. PHP7.3に関して
  2. 新機能
    2-1. 関数の引数の末尾にコンマを許可
  3. 新しく追加された関数
    3-1. array_key_first(), array_key_last()
    3-2. hrtime()
    3-3. is_countable()
  4. 下位互換性のない変更点, 推奨されなくなる機能
    4-1. フレキシブルなヒアドキュメント
    4-2. switch構文内でのcontinue
    4-3. 大文字と小文字を区別しない定数
    4-4. 文字列以外のNeedleを文字列で検索する
    4-5. フィルタリングのフラグ
  5. その他
    5-1. 定数JSON_THROW_ON_ERRORの追加
    5-2. setcookie()でSameSite属性をサポート
  6. 最後に

PHP7.3に関して

PHP7.3は2018年12月6日にリリースされました。
マイナーバージョンアップではありますが、ヒアドキュメントや新しく追加された関数など、実用性のある変更がありました。
今回はそれらPHP7.3の変更点に関して一部を紹介させて頂きます。


新機能

関数の引数の末尾にコンマを許可

PHP7.2までは配列の最後の要素にコンマ「,」が許可されていましたが、PHP7.3からは関数の引数でも「,」が許可されるようになります。
引数の追加や削除がより便利になりました。

ヒアドキュメントに関しては下で


新しく追加された関数

array_key_first(), array_key_last()

名前の通り、array_key_first()は配列の最初のキーを、array_key_last()は配列の最後のキーを返します。
array_keys()や、key()での取得より便利になりました。

hrtime()

任意の時間からの経過時間を高解像度時間で取得する。

is_countable()

引数がcount()できるか調べることができます。
PHP7.2への変更の時に配列およびCountableインターフェースを実装したオブジェクト以外をcount()で数えようとするとwarningが出るようになりました。そのためis_array()などでチェックする必要がありましたが、PHP7.3からはis_countable()で解決できそうです。


下位互換性のない変更点, 推奨されなくなる機能

フレキシブルなヒアドキュメント

PHP7.3では「””」で括られた文字列と同様に動作するヒアドキュメント、
「”」で括られた文字列と同様に動作するnowdocに関してアップデートがありました。
PHP7.2までは終端IDがある行には「;」以外の文字が含まれてはならないかつ、最後の区切り文字の後にも改行が必要でした。
PHP7.3からは終端IDがインデントできるようになり、終端IDがインデント位置が行頭になります。
そのため、文字列内に終端IDと同じ文字列があるとエラーになる恐れがあります。

switch構文内でのcontinue

PHP7.2まではswitch構文内でcontinueはbreakと同じ挙動をしていました。
PHP7.3からはwarningが出るようになります。またPHP8ではerrorになるようです。

大文字と小文字を区別しない定数

define()では第3引数でTRUEを指定すると定数は大文字小文字を区別しないようになりますが、これが非推奨となります。

文字列以外のNeedleを文字列で検索する

strpos()などの文字列検索関数に対し、検索したい文字列(Needle)に非文字列を渡すことが非推奨となります。

フィルタリングのフラグ

URLを厳密に検証されていることを確認するための2つのフラグが非推奨になります。
FILTER_FLAG_SCHEME_REQUIRED(URLスキーム), FILTER_FLAG_HOST_REQUIRED(URLホスト)


その他

定数JSON_THROW_ON_ERRORの追加

json_decode(), json_encode()のオプションで利用できる定数JSON_THROW_ON_ERRORが追加されました。
これによりjson_decode(), json_encode()でエラーが発生するとJsonExceptionが発生するようになります。
json_decode()はデコードに失敗した時などの場合、NULLを返しますが、json_decode(null)はNULLを返しますので、分かりづらい仕様でしたが、このオプションにより回避できます。

setcookie()でSameSite属性をサポート

CookieのSameSite属性は、Cookieを発行する際にSameSite属性を指定しておけばクロスドメインのリクエストにCookieをセットするかどうかを指定できますが、
PHP7.3からはsetcookie()とsetrawcookie()のオプションで指定できるようになります。


最後に

今回もPHPのバージョンに関して一部紹介の記事を書かせて頂きました。
新機能や廃止されてく機能を知ることは単純な感想になりますが、面白いですし、コーディングなど他にも活かしていけそうです。
今後もPHPの情報をキャッチアップして、発信できていければと思います。

GMOアドマーケティングではPHPエンジニアを募集しています。
興味がある方は以下のページをご覧ください。

■エンジニア採用ページ ~福利厚生や各種制度のご案内はこちら~