Quantcast
Channel: PHP8タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 521

PHP 7 で劇的に改善された PHP

$
0
0

悪いイメージのある PHP (個人の感想です)

PHP はなんとなく悪いイメージがある、そう思っている人はいませんか?

僕も昔はそうでした。

僕は学生の時に、 Java, Scala, Ruby あたりを使っていました。PHP を触ったのは就職してからです。今学生だとしても、 PHP は勉強せず、 Python, Go あたりを勉強しますね。

しかし、 PHP を使って開発されている Web アプリケーションは非常に多いです。PHP には Web アプリケーション向けの便利な機能が大量にあります。

また、 PHP 7 から型周り改善が多く入り、以前の PHP から見違えるようになりました。

なぜ PHP には悪いイメージがあるのか

なぜ PHP が嫌いな人が多いのか、それは、「厳密でない比較演算子 ==」のせいだと思っています。

PHP 8 では、この比較演算子が変更になったことでも話題になりました。

【PHP8.0】非厳密な比較演算子==の挙動が今さら変更になる

↑のQiita記事の例にもありますが、

"true"==0// true => PHP 8 からはこれが false に0=="0"// true"true"=="0"// false

これの不思議なところは、 "true" == 0であり、 0 == "0"なのに、"true" == "0"は false になる点である。A = B かつ B = C なのに A = C にならない違和感である。

"true" == 0がなぜ true になるのか、これは、文字列を int にキャストしようとした時に、文字列が数字から始まっていない場合は、 0にキャストされるからである。

(int)"true"// 0(int)"100"// 100(int)"100abc"// 100(int)"abc100"// 0

これは PHP のドキュメントにも書いてある。

https://www.php.net/manual/ja/language.operators.comparison.php

このキャストの挙動は PHP 8 でも変わっていない。==の挙動だけ修正されることになった。

PHP にはカオスな型の比較表があるのは有名だろう。一度見てみると面白いと思う。

https://www.php.net/manual/ja/types.comparisons.php

===による厳密な比較の表はいるのか?と思ってしまう。

PHP 7 になって良くなったこと

関数の引数や戻り値、プロパティなどに型を書けるようになったのだ。

classSomething{privateint$id;publicfunctionsetId(int$id){$this->id=$id;}publicfunctiongetId():int{return$this->int}}

昔と比べると、こんなのほんとにPHPなのか?と思うのかもしれないが、これが今の PHP である。

==の挙動は相変わらずだが、型がだいぶきっちりし始めて、ちゃんと書けばかなり使いやすい言語だと感じ始めた。

PHP 8

更に PHP 8 で色々機能が追加された。

Nullsafe operator や

image.png

Union types など、

classNumber{publicfunctiongetSomething():int|float{// int または float を返す}}

便利な機能が多く追加されている。

PHP の良いところ

やはり Web に特化した言語であり、他の言語にはない機能がいっぱいある。

HTMLの特殊文字をエスケープする関数や、

htmlspecialchars('<html>')// &lt;html&gt;

クエリ文字列を生成する関数

http_build_query(['a'=>1,'b'=>2])// a=1&b=2

JSON に変換する関数に、

json_encode(['a'=>1,'b'=>2]);// "{"a":1,"b":2}"

日の出の時間を取得する関数など(何に使うんだ)

$now=time();date_sunrise($now);// 04:30

Web に関する関数なら「こんなものもあるんだ」ってものまであります。 Web アプリを開発していると非常に便利です。

あとは、やっぱり利用者が多いので、 Web に知見が多く転がってるのは素晴らしいですね。ググれば大抵の問題は解決します。

PHP の良くない点

実際長年 PHP を触ってきましたが、やっぱり実行速度はコンパイル言語には勝てません。PHP 7 になってかなり高速化されました。PHP 8 は JIT コンパイルになってさらなる高速化が見込めますが、非同期処理が苦手なのもあり、やっぱり遅いです。

会社の新卒研修で Scala を使ったアプリケーションを作ったり、 https://lgtmoon.dev/も Scala で作ったりしましたが、サーバーが超貧弱にもかかわらずかなりのパフォーマンスが出ます。

ただ Scala はあまりにも知見が少ないので、今なら Go を選択しますかね。当時 Go が有名だったら Go を選んでいたと思います。

まとめ

かなりダラダラと書いてしまいましたが、昔と比べて PHP はかなり良い言語になってきたと思うので、皆さん食わず嫌いせず触ってみるといいかと思います。


Viewing all articles
Browse latest Browse all 521

Trending Articles