FLINTERS Engineer's Blog

FLINTERSのエンジニアによる技術ブログ

PHP7をためしてみた

こんにちは。村井です。
さて、今回はphpです。

昨年末にphp7が出ました。
php5からかなり間の空いたメジャーバージョンアップです。

最新のRedMonkのランキングでもphpは3位に入ってます。まだまだ使ってる人口は多いようですね。
redmonk.com

私が最初に触ったプログラム言語はphpなのですが、そのせいか今だに好きな言語の一つです。
とかいいつつ、php4以降触ってませんでしたがw

いい機会なので、php7の新機能を見つつ触れてみたいと思います。

まず、Macでのphp7の開発環境はMAMPを使いました。
MAMP3.5でphp7が使えます。
homebrewでphpenv入れてやろうと思ったけど色々あってやめました。
(やるなら、anyenvでphpenv管理した方がいいかも。rbenv入れてる人なら特に)

スカラー型宣言

php7になり、intやstringなどの基本的な型も指定できるようになったようです。
(php5まではarrayなどには出来た)

以下はデフォルトの自動変換 (coercive) モード

<?php  
  
function int(int $num){  
    return $num;  
}  
  
var_dump(int(1));  
var_dump(int("1")); 
var_dump(int(""));
?>  

int(1) int(1)と表示されます。 「あ」は型違いで表示されません。 2つ目の1はstringですが、デフォルトモードだと1と自動変換されて表示されます。

以下は厳密に判断するstrictモード

<?php  
declare(strict_types=1);

function int(int $num){  
    return $num;  
}  
  
var_dump(int(1));  
var_dump(int("1")); 
var_dump(int(""));
?>  

先頭にdeclare(strict_types=1);を書くと、厳密な型宣言となります。
つまり、ファイル単位で行うんですね。
そして、結果はint(1)だけです。
2つ目の1は厳密な型宣言をされていることにより、表示されません。

戻り値の型宣言

そのまんまです。
戻り値に型宣言が使えるようになりました。

<?php  
function int_string() : string{  
    return 1;  
}  
function string_int() : int{  
    return "";  
}  
var_dump(int_string());
var_dump(string_int());
?>  

デフォルトモードなので、ret_stringの方は1をstringにしてくれます。
strictモードにすると、どちらもエラーとなります。

他にもnull 合体演算子 (??) がシンタックスシュガーとして追加されたりなど、
新機能はまだまだあるんですがこの辺で。

参考 PHP: 新機能 - Manual