こんにちは!エンジニアのノムラです。
PHP7がリリースされてしばらくたちますが、みなさんPHP7を使いこなせていますか?
PHP5から何が変わったの?
PHPを始めるときはどのバージョンから始めるべき?
実際にPHP7を使ってみたい
という人に向けて、この記事では
【基礎】PHP5と何が違うの?
【応用】移行する時の注意点
【応用】実際にPHP7を使ってみよう
【応用】CentOSでPHP7をインストールする
という流れで、初心者にもわかりやすく解説していきたいと思います。
新しくPHPを勉強する人も、PHP7に移行をする人も、特徴や使い方をしっかりマスターしていきましょう。
PHP7とは
PHPは、WebサービスやWebアプリの開発に特化した言語です。
文法が覚えやすく、初心者でも学習を進めやすい言語で、人気の高いプログラミング言語です。
ここではPHP7について、最新バージョンやPHP5との違いなどを解説していきたいと思います。
現在の最新バージョンは?
PHPは2015年にメジャーアップデートとなるPHP7をリリースしました。
PHP5がリリースされてから約11年ぶりのメジャーアップデートです。
現在の最新バージョンはPHP7.2.7となっています。
http://jp2.php.net/ChangeLog-7.php
PHP5と何が違うの?
具体的にPHP5とPHP7では何が違うのでしょうか?
大きな違いとして以下があげられます。
- 速度の違い
- 新しい構文・演算子の実装
- 新しい関数の追加・非推奨関数の削除
PHP7での大きなアップデート内容として、速度改善があげられます。
実際にPHP5とPHP7でどれくらい速度の差があるのか試してみました。
今回試してみたのは以下のサンプルプログラムです。
サンプルプログラム
連想配列をforeach文100万回作成して、処理にかかる時間を計算します。
PHP5.6.3の実行結果
1回目 0.46337077507733秒
2回目 0.47122000717414秒
3回目 0.45819941277561秒
PHP7.2.5の実行結果
1回目 0.24232411384583秒
2回目 0.24397706985474秒
3回目 0.22603893280029秒
PHP7ではPHP5の約半分の時間で処理が完了しました。
かなり速度改善がされていることがわかりますね。
どのバージョンを使うべき?
今からPHPを始める人は、どのバージョンをインストールすればいいのか迷ってしまうこともあるかと思います。
結論から言うと、最新バージョンをインストールしましょう。
現在、PHPの公式ページではPHP5.6、7.0、7.1、7.2をインストールすることができます。
http://php.net/downloads.php
PHP5.5以前のものは、サポート期間が終了し、PHP5.6も2018年いっぱいでサポート終了してしまいます。
また、フレームワークやレンタルサーバー、WordPressの推奨バージョンは以下のようになっています。
CakePHP
PHP 5.6.0 以上 (PHP 7.2 も含む)
Laravel5.6
PHP 7.1.3以上が必要です。
Laravel5.5
PHP >= 7.0.0
エックスサーバー
PHP7 公式にサポートされ、従来のPHPと比較してパフォーマンスが大幅に強化されている
PHP 5.6.x 公式にサポートされているが、PHP 7.2.x への移行を推奨している
WordPress
PHPバージョン7.2以上を推奨
全てPHP5.6以上がサポートされていますが、PHP7以上を使うことが推奨されていますね。
PHP5.6の公式サポートが2018年内ということや、PHP7.2以上を推奨しているサービスも増えていることから、やはり今からPHPをインストールする場合はPHP7.2が確実です。
PHP7で追加された機能
PHP7では新しい機能が多く追加されています。
ここでは、PHP7で追加された新しい機能について解説したいと思います。
スカラー型宣言
PHP7では、PHP5以前の型宣言(タイプヒンティング)に加えて、スカラー型宣言が追加されました。
PHP5以前の型宣言
複合型 | 型 |
---|---|
配列 | array |
オブジェクト | object |
コールバック | collable |
特別型 | 型 |
---|---|
リソース | resourse |
NULL | NULL |
PHP7で追加されたスカラー型宣言
スカラー型 | 型 |
---|---|
論理値 | boolean |
整数 | integer |
浮動小数点数 | float (double) |
文字列 | string |
PHP5で導入された型宣言を強化する形で、4つの型宣言が追加されました。
パラメータとして型を指定することで、強制することができます。
サンプルプログラム
<?php // デフォルトのモード function sumOfInts(int ...$ints) { return array_sum($ints); } var_dump(sumOfInts(2, '3', 4.1)); ?>
実行結果
int(9)
int型を指定しているため、出力結果もint型になっています。
戻り値の型宣言
PHP7では戻り値の型宣言もできるようになりました。
指定できる型は先ほど解説した、PHP5以前の型宣言に加え、PHP7で追加されたスカラー型宣言を使うことができます。
サンプルプログラム
<?php function arraysSum(array ...$arrays): array { return array_map(function(array $array): int { return array_sum($array); }, $arrays); } print_r(arraysSum([1,2,3], [4,5,6], [7,8,9])); ?>
実行結果
Array ( [0] => 6 [1] => 15 [2] => 24 )
戻り値の型宣言を行うことで、関数が返す値の型を指定することができます。
namespaceのグループ化
複数のクラスや関数、定数を同じnamespaceからインポートする際に、use文にまとめられるようになりました。
サンプルプログラム
<?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}; ?>
1つのuse文にまとめると、コードがスッキリしますね。
namespaceやuseを使うときには、注意するべき点もあります。
以下の記事では、namesspaceとuseの使い方から注意点まで解説されています。
より詳しく知りたい人は参考にしてみてください。
define() を用いた配列定数の定義
PHP5までは配列の定数はconst()でしか行えなかったのに対して、PHP7ではdifine()で配列の定義ができるようになりました。
サンプルプログラム
<?php define('ANIMALS', [ 'dog', 'cat', 'bird' ]); echo ANIMALS[1]; // "cat" と出力します ?>
define()では、上のサンプルプログラムのような配列だけでなく、連想配列も定義することができます。
以下の記事では、そんなdefine()の使い方から連想配列の定義方法まで解説しています。
ぜひ参考にしてみてくださいね。
注意!PHP7で削除された関数
ここまで、新しい機能について解説してきましたが、PHP7で削除された関数もあります。
知らずにPHP7に移行してしまいエラーが出てしまった、ということにならないように、しっかり確認しておきましょう。
split
正規表現により文字列を分割し、配列に格納するsplit関数は、PHP5.3で非推奨になり、PHP7で削除されました。
代替として使える関数は、以下です。
【使い方】【PHP入門】文字列に関する操作まとめ(分割/文字数)explode()
【使い方】今すぐ解決!PHPでexplode関数を使い区切り文字で分割する方法str_split()
【使い方】【PHP入門】文字列に関する操作まとめ(分割/文字数)
それぞれの関数の使い方は、リンク先の記事を参考にしてみてください。
ereg
正規表現のマッチングを行うereg関数はPHP5.3で非推奨になり、PHP7で削除されました。
代替として使える関数は以下です。
正規表現でチェックするには、preg_match関数を使うことができます。
PHPには他にも様々な方法でチェックする関数が用意されているので、そちらも合わせて確認してみてくださいね。
mysql_db_query
データベースを選択肢、そこでクエリを実行するmysql_db_query関数は、PHP5.3で非推奨になり、PHP7で削除されました。
代替として使える関数は以下です。
mysqli_select_db()
【使い方】PHP: mysqli::select_db – Manual
PDO::__construct()
【使い方】PHP: PDO::__construct – Manual
mysqli_select_db()は、クエリを実行するためのデータベースを選択する関数なので、mysqli_select_db()の後にクエリを実行する形になります。
PHPから公式で提案されている代替関数は、削除された関数と全く同じ機能でない場合もあるので、代替関数に変更する場合はしっかり確認しましょう。
PHP7で削除された関数一覧
この他にもPHP7で削除された関数はあります。
ここでは、削除された関数を一覧にしました。
PHP7へ移行する前に、この表で確認してくださいね!
移行するときの注意点
実際に移行するとき、注意するべきポイントです。
- PHP5で非推奨だった関数を使用している
- 拡張モジュールを使用している
- 16進形式の数値を含む文字列を使用している
非推奨の関数については前述した通りです。
もしPHP5で非推奨の関数を使っていた場合は、代替の関数に変更しましょう。
拡張モジュールの確認
PHP7へ移行時、拡張モジュールを使用している場合は確認が必要です。
拡張モジュールとは
PHPの機能を拡張するためのモジュール。標準でも多くのエクステンションが組み込まれているが、新たに組み入れることも可能。エクステンションの配布先としては、PECLなどが有名。
この拡張モジュールがPHP7に対応していなかった場合、動作しなくなってしまいます。
PECLなどのPHP自体に組み込まれていない拡張モジュールを使用している場合は、対応状況を確認しましょう。
16進形式の数値を含む文字列
PHP7から、16進形式の数値を含む文字列は数値とはみなされなくなりました。
16進数とは、16を基数として表した数値で、0~9の数字と、A~Fのアルファベットで構成されます。
Webページなどの色を指定するときに使うカラーコードも16進数です。
以下のプログラムをPHP5とPHP7で実行してみました。
サンプルプログラム
<?php var_dump("0x10"=="16"); // PHP5: true, PHP7: false var_dump(is_numeric("0x10")); // PHP5: true, PHP7: false ?>
PHP5の場合
bool(true) bool(true)
PHP7の場合
bool(false) bool(false)
PHP5では16進数が数値とみなされtrueが出力されましたが、PHP7ではfalseになり、数値とみなされませんでした。
16進形式の数値を含んでいる箇所がある場合、変更が必要になります。
PHPには、文字列が16進数形式か判定し、int型に変換するfilter_var関数が用意されているので、関数を使って変換することもできます。
http://php.net/manual/ja/function.filter-var.php
実際に使ってみよう
それでは、PHP7を実際に使ってみましょう。
ここでは、PHP7のインストールからブラウザに文字を出力するまでを解説していきます。
PHP7のインストール
PHPのインストール方法は、環境によって異なります。
さらに、PHPとApacheをそれぞれインストールする方法と、XAMPPというアプリケーションを使ってインストールする方法に分かれます。
初心者はXAMPPを使ったインストールの方が簡単にインストールを行うことができます。
XAMPPで最新のPHP7.2をダウンロードするには、以下のページから行います。
https://www.apachefriends.org/download.html
このページから各環境に合わせ、ダウンロードを行いましょう。
2018/7時点での最新バージョンは「7.2.7 / PHP 7.2.7」です。
詳しいインストール方法は以下の記事で解説しています。
ぜひ参考にしてみてください。
また、PHPとApacheをそれぞれインストールする方法は、OSごとに以下のようになっています。
Windows
下記のPHPの公式サイトの「VC15 x64 Non Thread Safe (2018-Jul-18 12:51:38)」よりzipファイルをダウンロードします。
http://windows.php.net/download/
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
「HelloWorld」出力してみよう
インストールができたら、PHPでブラウザに「HelloWorld」を出力してみましょう。
今回はXAMPPでPHPをインストールした場合の出力方法を解説します。
まず、XAMPPのコントロールパネルを開きます。
Manage ServerからApache Web Serverを選択し、Startをクリックします。
次にXAMPP/htdocsの中に、PHPファイルを作成します。
今回はtest.phpというファイルを作成しました。
PHPファイルを作ることができたら、ブラウザに「HelloWorld」と表示してみましょう。
PHPの記述は、「<?php」からはじまり「?>」で終わります。
なので、「HelloWorld」と表示する場合は、「<?php」と「?>」の間に「HelloWorld」と表示させる命令を記述します。
<?php echo 'HelloWorld'; ?>
echoとはブラウザに文字を表示するときに使う命令です。
1つの文のおわりは「;」(セミコロン)で閉じましょう。
編集したPHPファイルを保存したら、ブラウザで確認してみましょう。
「http://localhost/」のあとに作成したPHPのファイル名を入力すると、ページが表示されます。
test.phpのページを表示したい場合は「http://localhost/test.php」となります。
実際にやってみると、「HelloWorld」と出力されたページが表示されるかと思います。
PHPを始めたばかりで、出力や変数など、基本的なことについてもっと知りたいという人には、以下の記事がオススメです。
プログラムがどのようにブラウザに表示されるのかを試しながら勉強を進めていきましょう。
【発展】CentOSでPHP7をインストールする
CentOSの標準リポジトリのPHPのバージョンは5になっています。
今回は、CentOSでPHP7.2をインストールする方法を解説します。
CentOSでPHP7.2をインストールするには、Remiのリポジトリを活用して行なっていきます。
まず、Remiリポジトリをインストールするために、EPELリポジトリをインストールします。
yum install epel-release
続いてRemiリポジトリもインストールしましょう。
yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
php7.2とhttpd 2.4をインストールします。
yum install httpd mod_ssl php72 php72-php
インストールが完了したら、Apache httpdが再起動するよう設定し、起動させます。
systemctl enable httpd.service systemctl start httpd.service
正しくインストールができているかを確認するために、phpinfo関数を使って、info.phpを作成します。
echo "<?php phpinfo();" > /var/www/html/info.php
http://サーバホスト名/info.phpにアクセスしてPHPinfoの画面が表示されれば、正しくインストールが完了しています。
まとめ
今回は、
- PHP7とは?
- PHP5との違いは?
- 新機能や削除された機能について
- インストール方法
といった、PHP7の基礎的な内容から、応用まで解説してきました。
PHP7は、新しい機能の追加や速度改善が行われ、PHP5以前より優れている点がたくさんあります。
この記事を参考に、PHP7での開発を進めていってくださいね!