はじめに
2018年12月6日に、PHP 7.3.0がリリースされました!
PHP7.0は既にサポートが終了し、PHP5.6も2018/12/31で終了となってしまいます
参考:http://php.net/supported-versions.php
そこで、PHP7.3.0からできるようになったことをPHP7.2.13と比較してみました!
試した環境
- CentOS Linux release 7.6.1810 (Core)
PHP7.3.0からできること
追加された関数
-
is_countable ( mixed $var )
返り値:bool
...引数が、数えられる値かどうかを調べることができます。
今までだと( is_array($arrEto) || $arrEto instanceof Countable )
で代用する必要がありました。
$arrString = ['お', 'な', 'か', 'す', 'い', 'た'];
var_dump(is_countable($arrString)); //bool(true)
$string = 'おなかすいた';
var_dump(is_countable($string)); //bool(false)
-
array_key_first ( array $array )
返り値:mixed
...配列の最初のキーを取得できます。 -
array_key_last ( array $array )
返り値:mixed
...配列の最後のキーを取得できます。
$arrEto = array(
'2018年' => '戌',
'2019年' => '亥',
'2020年' => '子',
'2021年' => '丑',
);
var_dump(array_key_first($arrEto)); //string(7) "2018年"
var_dump(array_key_last($arrEto)); //string(7) "2020年"
-
hrtime ([ bool $get_as_number = FALSE ] )
返り値:mixed
-...ナノ秒単位でタイマーを測ることができます。
$a = hrtime(true);
sleep(3); //3秒(=3*(10の9乗)ナノ秒)スリープさせる
$b = hrtime(true);
$nano = $b - $a; //ナノ秒
$second = $nano / pow(10, 9); //秒 に変換
var_dump($nano); //int(3001999046)
var_dump($second); //float(3.001999046)
heredoc/nowdocが柔軟にかけるようになりました。
- heredoc ... 「"」で文字列をくくるのと同様で変数展開が可能である。
<<<EOD
とEOD;
で文字列をくくるやつ。「EOD」の部分はなんでもよい。 - nowdoc ... 「'」で文字列をくくるのと同様で変数展開が不可能である。
<<<'EOD'
と'EOD';
で文字列をくくるやつ。「EOD」の部分はなんでもよい。
終端IDの行にインデントやコメントを入れることが可能になりました。
また、heredoc/nowdocの後に文字連結することもできます。
ただし、タブとインデントを混ぜたり、終端IDのインデントを文字列より右側にするとエラーになります。
hoge.php
<?php
class Hoge
{
public function getMessage(): void
{
$php_version = PHP_VERSION;
echo $message = <<<EOM
PHP Version:
{$php_version}
EOM . ' 終端IDの行に文字結合してみる。'; //行先頭にインデントをとり、heredocの後に文字連結もしています。
}
}
$hoge = new Hoge();
$hoge->getMessage();
PHP7.3.0
[vagrant@localhost ~]$ php hoge.php
PHP Version:
7.3.0 終端IDの行に文字結合してみる
PHP7.2.13 (パースエラーになっちゃいます)
[vagrant@localhost ~]$ php hoge.php
PHP Parse error: syntax error, unexpected end of file in /home/vagrant/hoge.php on line 18
関数コール引数の末尾にカンマが使えるようになりました。
※もともと配列の末尾にはカンマは使えます。
hoge.php
<?php
$arrEto = array(
'2018年' => '戌',
'2019年' => '亥',
'2020年' => '子',
'2021年' => '丑', //ここは以前からカンマ使えてます。
);
$arrEto = array_merge(
$arrEto,
array('2022年' => '寅'), //関数コール引数の末尾カンマ!
);
var_dump($arrEto);
PHP7.3.0
[vagrant@localhost ~]$ php hoge.php
array(5) {
["2018年"]=>
string(3) "戌"
["2019年"]=>
string(3) "亥"
["2020年"]=>
string(3) "子"
["2021年"]=>
string(3) "丑"
["2022年"]=>
string(3) "寅"
}
PHP7.2.13
[vagrant@localhost ~]$ php hoge.php
PHP Parse error: syntax error, unexpected ')' in /home/vagrant/hoge.php on line 13
preg_quote()のエスケープ対象として、「#」が追加されました。
PHP7.3.0
php > var_dump(preg_quote('#'));
string(2) "\#"
PHP7.2.13
php > var_dump(preg_quote('#'));
string(1) "#"
※php -a
よりインタラクティブモードで実行しています。
PHP7.4からプロパティにも型が指定できるようになります。(予定)
参考:https://qiita.com/rana_kualu/items/9b4502d229d19635ef34
※現在、以下コードのように、関数コール引数や戻り値の型指定はできます。
<?php
class User
{
public $memberId; //ここにも型指定が可能に! public int $memberId;
public $userName; //ここにも型指定が可能に! public string $memberId;
public function setMember(int $memberId, string $userName): void
{
$this->memberId = $memberId;
$this->userName = $userName;
}
}
$userObj = new User();
$userObj->setMember(123, 'taro');
まとめ
まだまだ、PHP7.3.0での変更はあります!
よければ以下記事を参考にしていただければと思います。