LoginSignup
6
3

More than 5 years have passed since last update.

PHP7.3.0からできるようになったこと

Last updated at Posted at 2018-12-18

はじめに

2018年12月6日に、PHP 7.3.0がリリースされました!:raised_hands:
PHP7.0は既にサポートが終了し、PHP5.6も2018/12/31で終了となってしまいます:scream:
参考: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 ... 「"」で文字列をくくるのと同様で変数展開が可能である。
    <<<EODEOD;で文字列をくくるやつ。「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での変更はあります!
よければ以下記事を参考にしていただければと思います。

6
3
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3