このエントリーはaratana Advent Calendar 2018 20日目のエントリーです。
最近スマブラにハマっています筆者です。メインキャラはネスです、むしろそれ以外使えません。
さて、最近新規開発時のPHPのバージョンをPHP5.6からPHP7.2へとアップデートを行いました。
その際にハマったこと、便利だと思ったことなどつらつらとまとめていきたいと思います。
なぜバージョンアップしたのか
今まで使用してきたPHP5.6は、セキュリティサポート期間が2018/12/31で終了します。1
上記の理由もあり、このタイミングで1からシステムを開発するのにPHP5.6系を採用する恩恵が現時点でなかったため、バージョンアップして開発することを決定しました。
あと個人的にPHP7系で実装してみたかったのです(小声)
ざっくりシステム概要
-
従来の環境
- PHP 5.6.30
- composer 1.2.0
- PHPUnit 4.8.27
-
今回バージョンアップした環境
- PHP 7.2.9
- composer 1.7.3
- PHPUnit 7.4.4
PHP7.2系に移行してよかった点
厳格な型指定ができる
型指定をしてると妙な安心感がでてくるのは筆者だけでしょうか?
実際に下記内容を取り入れて開発を進めました!
- 厳格な型検査モード(
declare(strict_types=1);
)の指定 - 型宣言の記載
実際に取り入れてみて、大変といった印象はありませんでした。むしろ楽しいと思うくらいでした。w
<?php
declare(strict_types=1);
namespace Hoge;
/**
* Class Message
* @package Hoge
*/
class Message {
/**
* @var string
*/
public $message = "";
/**
* @return string
*/
public function get():string
{
return $this->message;
}
/**
* @param $message
*/
public function set(string $message):void
{
$this->message = $message;
}
}
use宣言がグループ化できる
これが地味に嬉しいポイントでしたw
Symfonyなどの大型フレームワークを使用する際にはかなり有り難いのではないでしょうか。
use Hoge\{
Fuga\InterFace1,
Fuga\Class1,
Class2
};
開発しててハマった点
PHPUnitのクラス名
いつものようにテストコードを準備していると下記エラーが発生しました。
PHP Fatal error: Class 'PHPUnit_Framework_TestCase' not found in /Users/hogehoge/fugafuga/tests/CommonTestCase.php on line 9
調べてみるとPHPUnitのクラス名 PHPUnit_Framework_TestCase
がバージョン6.0から名前空間化されているとのこと。2
使用しているクラス名を名前空間化された PHPUnit\Framework\TestCase
に変更して無事にテストを通すことができました!
<?php
declare(strict_types=1);
namespace Hoge;
/**
* Class MessageTest
* @package Hoge
*/
class MessageTest extends \PHPUnit\Framework\TestCase
{
/**
* @var Message
*/
private $message;
/**
*
*/
protected function setUp():void
{
parent::setUp();
$this->message = new Message();
}
/**
*
*/
protected function tearDown():void
{
parent::tearDown();
}
/**
*
*/
public function testGetter():void
{
$message = "Getter Test.";
$this->message->message = $message;
$this->assertEquals($message, $this->message->get());
}
/**
*
*/
public function testSetter():void
{
$message = "Setter Test.";
$this->message->set($message);
$this->assertEquals($message, $this->message->message);
}
}
最後に
まだPHP7.2系に移行したばかりで使いこなせていない感は拭えませんが、今までとほぼ変わることなく順調に開発を進めることができています。今のところは。。。
そのうち既存システムもPHP7系に。。。(小声)
その際はPHP5系と7系でのパフォーマンスの差などデータ収集してまとめたいなと思います。
それでは、素敵なPHPライフを!!