対象読者
- PHPについて基本的な概念を理解している方
- WEBアプリケーションを開発している方
- PHP 5からPHP 7への移行に興味がある方
必要な環境
この記事では、PHP 7(RC7)を使ってLinux(Ubuntu14.04)とMac(10.11)で確認を行っています。インストール手順などは各環境によって違いがある部分もありますが、今回紹介する仕様に関しては環境による違いはありません。
既存のプロジェクトへの影響
前回、PHP 7ではPHP 5からバージョンアップであれば既存コードに関してはあまり変更がなくバージョンアップが可能であると伝えましたが、実際にPHP 5以前からのコードも含まれていたりすることもあり、既存のコードを利用しPHP 7へバージョンアップする場合には大きく分けて以下のようなことに注意する必要があります。
- PHP 5の時点において非推奨の利用方法や関数などを使っている場合
- PHPの基本構造に近い部分での実装がある場合。主にフレームワークを自作などをしている場合。
- PECLなどのPHP自身のソースに含まれていないサードパーティ製の拡張モジュールを使っている場合
これらのいずれかに該当する場合には、十分な注意が必要です。
PHP 7で推奨されなくなる機能
まだ、その利用自体ができなくなるわけではありませんが、今後利用できなくなる可能性もあるものです。この変更はPHP4から使われているコードがある場合や、現時点でも推奨されないような使い方をしている場合には注意が必要です。
クラス名と同じコンストラクタを利用している場合
PPH4ではクラス名と同じコンストラクタを宣言する形式でしたが、PHP 5では__construct()メソッドに統一されました。したがって、リスト1のようなコードはPHP 7では推奨されなくなり、PHP 7ではE_DEPRECATEDでのワーニングが表示されます。すぐに使えなくなるわけではありませんが、PHP4からの資産はこの機会に対応を行った方が良いでしょう。
class Foo{ function Foo(){ // クラス名と同名のコンストラクタ echo "Create Foo\n"; } } $foo = new Foo();
staticメソッドでないメソッドのstatic呼び出し
PHP 5ではstatic宣言させていなくても、staticメソッドとして呼び出すことができましたがPHP 7では推奨されなくなりました。リスト2がその一例です。
class Foo{ public function println() { echo "static println\n"; } } $foo = new Foo(); $foo->println(); //(1)インスタンスメソッドとして実行 Foo::println(); //(2)Staticメソッドとして実行
リスト2の(1)は問題ないメソッドの実行ですが、(2)ではstaticメソッドではないためにE_DEPRECATEDでのワーニングが表示されます。反対に、staticメソッドとして宣言したメソッドをインスタンスメソッドとして実行するにはワーニングなどが表示されないようですが、こちらも良いコードとは言えませんので、もしそのようなコードがあればこの機会に対応することをおすすめします。