こんにちは!ライターのmuramatsuです。
突然ですが、皆さん現在PHPのバージョンは何を使われていますか?
常にバージョンアップが行われているPHP。
WordPressやCakephpなどのソフトウェアのバージョンアップデートはしているけど、PHPのバージョンはアップデートはしていない事がよくあります。
最新のバージョンにしていないと、ソフトウェアとの互換性などが合わなくなってきて、予期せぬ不具合につながってしまう、ということも考えられます。
そんなことが起きないように、今回は現在最新のPHP 7.2について
- PHP 7.2とは
- 新機能
- 推奨されなくなった機能一覧
- php7.2のインストール方法
を解説していきます。
常に、なるべく新しいPHP情報を入れるようにしておきましょう!
PHP 7.2について
PHP 7.2は、2017年11月30日にリリースされています。
PHP 7.1から新機能や関数の追加と、非推奨になった機能がありますが、今年の終わり頃にはPHP 7.3のリリースがすでに予定されています。
大体1年おきくらいにマイナーアップデートされていて、アクティブサポート期間、セキュリティーサポート期間がそれぞのバージョンで決められています。
| バージョン | アクティブサポート期間 | セキュリティーサポート期間 | 
|---|---|---|
| PHP 7.1 | 2018年12月1日まで | 2019年12月1日まで | 
| PHP 7.2 | 2019年11月30日まで | 2020年11月30日まで | 
常に新しい情報を取り入れ、いつの間にか使っているPHPのサポート期間が終わっていた、なんて事のないようにしていきましょう。
サポート期間については、以下から確認ができます。(英語)
http://php.net/supported-versions.php
まずはPHP 7.3にバージョンアップされる前に、PHP 7.1とPHP 7.2の間にどういった変更点があったのかを見ていきましょう。
また、PHP 7についての解説は以下の記事を参考にしてみてくださいね。
            
                 
                    
PHP 7.2の新機能
PHPの公式サイトで確認すると、18種類の新機能が追加されています。
その中でも知っておいて損はない新機能を紹介していきましょう。
なおPHP公式サイトから全ての新機能、新しい関数、PHP 7.2以降で推奨されなくなる機能などの解説は以下のURLから確認ができます。
http://php.net/manual/ja/migration72.php
object型が新たに導入
PHPでは本来、JAVAなどのように文字列や数字などの型を指定しなくても実行されますが、これまでのバージョンアップでstring型やint型などの型宣言ができるようになってきていました。
今回のPHP 7.2では加えてobject型もできるようになっています。
これにより引数をオブジェクト型として指定することができます。
<?php
class TestClass {}
function sample(object $bar) : object
{
    return new TestClass();
}
sample(new TestClass());
?>
また、返り値もオブジェクト型として指定することができます。
抽象メソッドのオーバーライド
抽象クラスが他の抽象クラスを継承している時、継承した抽象メソッドの引数を省略することができます。
また、抽象メソッドをオーバーライドできるようになりました。
<?php
abstract class Test1
{
    abstract function sample(string $str);
}
abstract class Test2 extends Test1
{
    abstract function sample($str) : int;
}
?>
ここでは抽象クラスTest1の引数string型を、抽象クラスTest2では省略できています。
そして抽象クラスTest2で返り値の型を指定するオーバーライドをしても、コンパイルエラーは起きません。
sodium関数の追加
PHP言語ライブラリの拡張モジュールにsodium関数が追加されました。
sodium関数の一部には以下があります。
| 関数 | 用途 | 
|---|---|
| sodium_add | 大きな数字を加える | 
| sodium_crypto_auth_keygen | キーのためのランダムバイトを取得してくれる | 
| sodium_crypto_box_sea sodium_crypto_box sodium_crypto_secretbox sodium_crypto_stream_xor | メッセージを暗号化する | 
| sodium_crypto_generichash_init | ハッシュを初期化する | 
| sodium_crypto_sign_verify_detached | メッセージのサインを検証する | 
| sodium_crypto_sign | メッセージにサインする | 
sodium関数はこの他にもたくさんの種類が用意されています。
日本語での詳しい情報はまだ掲載されていませんが、以下のURLを見ながら試してみてください。
http://php.net/manual/ja/book.sodium.php
proc_niceがWindowsでも使用可能
proc_niceは優先順位を付けれる関数です。
今まではproc_nice関数はLinuxのみで使えていましたが、PHP 7.2からWindowsでも使用できるようになっています。
proc_nice関数に関しての詳細:
http://php.net/manual/ja/function.proc-nice.php
pack() unpack()でのエンディアンサポート
データをバイナリ文字列にパックするpack()関数とバイナリ文字列からデータを連想配列で取得するunpack()関数で、小数点の float や double でも対応ができるようになりました。
pack()、unpack()についての詳細は以下のURLから確認できます。
pack()関数:http://php.net/manual/ja/function.pack.php
unpack()関数:http://php.net/manual/ja/function.unpack.php
Oracle OCI8の追加
Oracle社の透過的アプリケーション・フェイルオーバー(TAF)のサポートが追加されて、接続しているデータベースが切れてしまっても自動的に再接続してくれる機能です。
透過的アプリケーション・フェイルオーバー(TAF)については以下のURLから確認ができます。
https://docs.oracle.com/cd/E16338_01/java.112/b56281/ocitaf.htm
推奨されなくなった機能一覧
いつの間にか使えなくなっている、という事が無いように非推奨になった機能をみていきましょう。
非推奨から今後エラーや削除される機能
| 機能 | PHP 7.2での 変更点 | 今後の変更予定 | 
|---|---|---|
| クォートしない文字列 | E_WARNING が発生 | メジャーチェンジでErrorになる | 
| INTL_IDNA_VARIANT_2003 バリアント | 削除 | php7.4からINTL_IDNA_VARIANT_UTS46に変更 | 
| png2wbmp()および jpeg2wbmp() 関数 | 非推奨 | メジャーチェンジで削除 | 
非推奨になる関数・メソッド
| 関数・メソッド | PHP 7.2での 変更点 | 代替の関数・推奨事項 | 
|---|---|---|
| __autoload() メソッド | 非推奨 | なし | 
| (unset) キャスト | 非推奨 | なし | 
| each()関数 | 非推奨 | なし | 
| create_function() 関数 | 非推奨 | 無名関数 | 
| gmp_random() 関数 | 非推奨 | gmp_random_bits() および gmp_random_range() を使うこと | 
| assert()関数に文字列を渡す | 非推奨 | boolean 値を渡すのがお勧め | 
| read_exif_data() 関数 | 非推奨 | exif_read_data() 関数 | 
| 第二引数を指定しないで parse_str() 関数を使う | 非推奨 | 2番目の引数は常に設定すべき | 
その他非推奨になる機能
| 機能 | PHP 7.2での 変更点 | 代替の関数・推奨事項 | 
|---|---|---|
| エラーハンドラの $errcontext 引数 | 非推奨 | なし | 
| php.ini の track_errors および $php_errormsg 変数 | 非推奨 | エラー情報収集は error_get_last() 関数を使う | 
| mbstring.func_overload | 非推奨 | なし | 
使えなくなった機能を頭に入れておくだけでも、今後の作業に役だってくるのでぜひ確認してください。
もし忘れてしまっても、再度この記事を参考にしてくださいね。
php 7.2 のインストール方法
PHP 7.2の機能がわかったところで、最新のPHPにアップデートしたいけど方法がいまいちわからない、という方にインストール方法を紹介しましょう。
PHPのインストールは、各種プラットフォームにより方法が異なります。
Windows
下記のPHPの公式サイトのVC15 x64 Non Thread Safe (2018-Jul-18 12:51:38)よりzipファイルをダウンロードします。
2018年7月時点ではバージョンはPHP 7.2 (7.2.7)です。
http://windows.php.net/download/
またダウンロード方法については、以下のURLを参考にしてみてくださいね。
https://weblabo.oscasierra.net/php-72-windows-install/
Unix系
LinuxやCentOSなどのUnix系のシステムのPHPのインストールは、以下のPHPの公式サイトUnix システムへのインストールより、手順に従ってインストールする必要があります。
http://php.net/manual/ja/install.unix.php
Mac
下記のPHPの公式サイトMac OS X へのインストールより手順に従ってインストールします。
コンパイルの手順はUnix系と同様です。
http://php.net/manual/ja/install.macosx.php
またターミナルからHomebrewを使ってPHPのアップデートを簡単にすることも可能です。
Homebrewのインストール方法:https://qiita.com/saken649/items/b5830de62211b600f7ee
Homebrewを使ってPHPをアップデートする方法:https://qiita.com/yamatmoo/items/4ff2fe1785f771e67e08
この記事ではPHP 7.1にアップデートする方法ですが、PHP 7.2にアップデートする場合は、php@7.1の部分を必ずphp@7.2にしてください。
まとめ
PHP 7.2について、新しく追加された機能や、今まで扱い難かった機能が今後は非推奨になって行ったりと、常にPHPは進化し続けています。
大体1年ごとにマイナーアップデートされているので、すぐにアップデートしなくてもいいやと思うかもしれません。
しかしあまりPHPをアップデートしていないで、いつの間にかセキュリティーサポート期間が終わっていた、不具合が起きる、、、なんて事のないようにしましょう。
また、PHP 8も数年後にはリリースするのではないかと言われています。
なるべく新しい情報だけでも入れておくことをオススメします!
 
  






 
        