PHP7系の使える新機能系まとめ

こんにちはAKIです。

PHPの入門講座をサボり出してから早数ヶ月、書きたい気持ちはあるんですが
入門って難しいですね。どこまで説明すればいいのか分からないんです。

という言い訳はさておき、

最近PHPの7系の新機能を調べるのにハマっていてQiitaに記事をあげていますが、
目に留まった便利なものをブログの方にも更新したいと思います。

PHP7.0

タイプヒンティング

まず、PHP7からタイプヒンティング(型指定)ができるようになりました。
PHPは型指定しなくてもなんでもかんでも動くというのが初心者からすると入門しやすいメリットでもあり、
がっつり使っていくにはデメリットでもあったわけですが、これが5.6系から解消されたのが1番のメジャーバージョンアップかと思います。

php7.0からの新機能null合体演算子の使い方

php7.0からの新機能null合体演算子の使い方 - Qiita
php7系は5.6からメジャーバージョンとして大幅に変更されていますが、タイプヒンティングなど有意義なものが多いです。null合体演算子はその中でも便利な新機能です。null合体演算子php…

phpはissetやempty、is_nullなどの型判定がありますが
isset()と三項演算子を組み合わせたパターンはよくあると思います。

$hoge = 'a';
$test = isset($hoge) ? $hoge : 'other';
var_dump($test);

これを

$hoge = 'a';
$test = $hoge ?? 'other';
var_dump($test);

$hoge = null;
$test = $hoge ?? 'other';
var_dump($test);

と書くことができます。

出力結果
ーーーーー
string(1) "a"
string(5) "other"

PHP7.1.x

php7.1から使える負の文字列オフセット

php7.1から使える負の文字列オフセット - Qiita
php7.0以前までは、$str のように、 角括弧を使用してゼロから始まるオフセットを指定すると、文字列内の任意の文字を取り出すことが可能でした。ただ、php7.1からは負の値のオフセ…

php7.1からは負の値のオフセットも指定できるようになりました。

var_dump("abcdef"[-1]);
var_dump("abcdef"[2]);
var_dump("abcdef"[-3]);
出力結果
ーーーーー

string(1) "f"
string(1) "c"
string(1) "d"

単一文字の場合はsubstr()を使う必要がなくなりそうです。
複数の文字を取り出したり変更したりしたいときは、substr()を使用すればよいです。
ただ、個人的には第三者への可読性という意味ではsubstr()を使ってもいいのかと思います。

php7.1から「$this」の矛盾の修正がされている!?

php7.1から「$this」の矛盾の修正がされている!? - Qiita
phpでは$thisは特別な意味を持ちますが、php7.1から変数名として使ったり、値の代入ができないようにきちんとチェックをすように修正されているとの記述を公式のDocumentを見ていて知りま…

phpでは$thisは特別な意味を持ちますが、
php7.1から変数名として使ったり、値の代入ができないようにきちんとチェックをすように修正されているとの記述を公式のDocumentを見ていて知りました。

むしろ、当たり前のように使っていたからphp7.0まではチェックしていなかったことを知りませんでした…

php7.1から使えるnullableな型宣言について

php7.1から使えるnullableな型宣言について - Qiita
タイプヒンティングが使えるようになるphp7系ですが、php7.1はさらにパラメータや返り値の型宣言で nullable 指定ができるようになりました。Null許容型型の前にクエスチョンマーク…
  • 関数の戻り値の場合
<?php

function test_return(): ?string
{
return 'hogehoge';
}

var_dump(test_return());

function test_return(): ?string
{
return null;
}

var_dump(test_return());
出力結果
ーーーーー
string(8) "hogehoge"
NULL

上記のようにstring指定の型でもnullを返すことができます。

  • 関数の引数の場合
function test_dump(?string $name)
{
var_dump($name);
}

test('hogehoge');
test(null);
出力結果
ーーーーー
string(8) "hogehoge"
NULL

上記のようにstring指定の型でもnullを渡すことができます。

ちなみに、

test_dump();

で上記関数を呼び出した場合は、

Too few arguments to function test_dump(), 0 passed in ...

が発生します。

なので、

function test_dump(string $name = null)
{
var_dump($name);
}

の定義とは違いますね。

PHP7.2.x

php7.2からeach()関数は非推奨になった

php7.2からeach()関数は非推奨になった - Qiita
この関数は、配列のkeyとvalueのペアを返す関数ですが、foreachよりもループが遅く、PHPそのものの変更に伴って実装上の問題を引き起こしたことから非推奨になったそうです。通常はlist…

この関数は、配列のkeyとvalueのペアを返す関数ですが、
foreachよりもループが遅く、PHPそのものの変更に伴って実装上の問題を引き起こしたことから非推奨になったそうです。

通常はlist関数と併用することが多いですが、普通にforeachを使えば十分なのであまり困ることはないかと思います。

// 関数サンプル

$foo = ["test1", "test2", "test3", "test4"];
$bar = each($foo);
var_dump($bar);
出力結果
ーーーーー
array(4) {
[1]=>
string(5) "test1"
["value"]=>
string(5) "test1"
[0]=>
int(0)
["key"]=>
int(0)
}

PHP7.3.x

PHP7.3からヒアドキュメントのインデントのズレが解消される件

PHP7.3からヒアドキュメントのインデントのズレが解消される件 - Qiita
ヒアドキュメントは使う箇所によってはソースの可読性をあげられますがPHP7.2までは、終了マーカーまでをインデントなしで定義しないとダメでした。最初PHPでこれを見た時に気持ち悪いなと思ってまし…

ヒアドキュメントは使う箇所によってはソースの可読性をあげられますが
PHP7.2までは、終了マーカーまでをインデントなしで定義しないとダメでした。
最初PHPでこれを見た時に気持ち悪いなと思ってました。

が、PHP7.3からようやくこの問題が解消されるようです。

<?php 
class foo { 
    public $bar = <<< EOT
barbar
hogehoge
EOT; 
}

今まではこう書く必要があったのが、、、

<?php 
class foo { 
    public $bar = <<< EOT
    barbar
    hogehoge
    EOT; 
}

と記述できるようになります。
可読性が上がりますね!

 

 

いかがでしたでしょうか?

全てではないですが、あくまで私個人として気になったものをまとめました。

今後も更新があれば追記していきたいと思います。

 

それでは。

PHP プログラム学習
この記事の投稿者
AKI

ソフトウェアエンジニア歴10年以上、業務系システムからゲーム開発まで幅広く経験し
現在はフリーランスプログラマとして従事している。
得意言語: PHP, JavaScript, Java, C#(Unity)

フォローする
フォローする
スポンサーリンク
WoW creators
タイトルとURLをコピーしました