悪いイメージのある 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 のドキュメントにも書いてある。
このキャストの挙動は PHP 8 でも変わっていない。==
の挙動だけ修正されることになった。
PHP にはカオスな型の比較表があるのは有名だろう。一度見てみると面白いと思う。
===
による厳密な比較の表はいるのか?と思ってしまう。
PHP 7 になって良くなったこと
関数の引数や戻り値、プロパティなどに型を書けるようになったのだ。
class Something
{
private int $id;
public function setId(int $id)
{
$this->id = $id;
}
public function getId(): int
{
return $this->int
}
}
昔と比べると、こんなのほんとにPHPなのか?と思うのかもしれないが、これが今の PHP である。
==
の挙動は相変わらずだが、型がだいぶきっちりし始めて、ちゃんと書けばかなり使いやすい言語だと感じ始めた。
PHP 8
更に PHP 8 で色々機能が追加された。
Nullsafe operator や
Union types など、
class Number {
public function getSomething(): int|float
{
// int または float を返す
}
}
便利な機能が多く追加されている。
PHP の良いところ
やはり Web に特化した言語であり、他の言語にはない機能がいっぱいある。
HTMLの特殊文字をエスケープする関数や、
htmlspecialchars('<html>') // <html>
クエリ文字列を生成する関数
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 はかなり良い言語になってきたと思うので、皆さん食わず嫌いせず触ってみるといいかと思います。