(jp) =
一般的に、Web 開発者やプログラマーの間では、PHP の評判が良くないことは周知の事実です。 Web アプリケーションの構築に最もよく使用される言語の 1 つであるにも関わらず、 何年にもわたって、PHP は、乱雑なコードベース、経験の浅い開発者、安全でないコード、一貫性のないコア ライブラリなどの評判を得てきました。
PHP に反対する議論の多くは今日でも有効ですが、明るい面もあります。 できる クリーンで保守しやすく、高速で信頼性の高いアプリケーションを PHP で作成します。
この投稿では、PHP 開発のこの明るい面を見ていきたいと思います。 多くの欠点があるにもかかわらず、PHP は学ぶ価値のある言語であることを示したいと思います。 PHP 5 の時代が終わりに近づいていることを知っておいてほしい。 必要に応じて、モダンでクリーンな PHP コードを記述し、10 年前の混乱の多くを残すことができます。

では、ここ数年で言語がどのように変化し、成熟したかを見てみましょう。 ほんの数分間、偏見を脇に置いて、今日の PHP に驚かされることをお勧めします。
飛び込みましょう。
# 歴史まとめ
詳細に入る前に、言語である PHP が最近どのように開発されているかを見てみましょう。 現在はバージョン 7.4 で、2020 年末には PHP 8 が次のバージョンになります。
5.* 時代の後半以降、コア チームは一貫した年次リリース サイクルを維持しようと努めており、過去 4 年間、これに成功しています。
一般に、すべての新しいリリースは 2 年間アクティブにサポートされ、さらに 1 年間は「セキュリティ修正のみ」が提供されます。 目標は、開発者が可能な限り最新の状態を維持するように動機付けることです。たとえば、5.4 から 7.0 にジャンプするよりも、毎年小さなアップグレードを行う方が簡単です。
最後に、PHP 5.6 が最新の 5.* リリースで、7.0 が次のリリースです。 PHP 6 に何が起こったのか知りたい場合は、PHP Roundtable ポッドキャストのこのエピソードを聞くことができます。
最近の PHP の開発は、ボランティアのグループによって行われています。そのうちの何人かは、コアにフルタイムで取り組むために雇用主から報酬を受けています。 言語がどのように進化したかについての議論のほとんどは、メーリング リストで行われます。
以上のことをすべて終えたところで、最近の PHP に関するよくある誤解を正しましょう。
# PHP の型システム
PHP は非常に弱く動的に型付けされた言語として始まりましたが、当時は利点がありました。 しかし、大規模なプロジェクトで PHP が使用されるようになって以来、その型システムの欠点が明らかになり、より強力な型サポートの必要性が生じました。
今日、PHP はかなりユニークな言語です。完全に動的で弱い型付けのコードを書くことができますが、はるかに強力なオプトイン型システムも備えています。 静的解析、Psalm、Phan、PHPStan などのツールを組み合わせることで、安全で厳密に型指定され、静的に解析されたコードを記述できます。
たとえば、最新の型システムを完全に使用したこの PHP コードのスニペットを見てください。
<?php
declare(strict_types=1);
final class Foo
public int $intProperty = 2;
public ?string $nullableString = null;
private Bar $bar;
public function __construct(Bar $bar)
$this->bar = $bar;
public function withInt(int $value): self
$clone = clone $this;
$clone->intProperty = $value;
return $clone;
public function unionTypes(int
正直なところ、PHP の型システムにはまだ欠けている重要な機能が 1 つあります。ジェネリックです。 それらが追加されることを期待していますが、まだ具体的なものは何もありません. 型付き配列の場合、適切な IDE サポートを取得するには、docblock に依存する必要があります。
public array $arrayOfInts = [];
型付き配列はジェネリックの一般的な使用例であり、docblock で解決できますが、言語に含まれていないために見逃している機能がまだたくさんあります。
# PHP の構文
7.* 時代は、構文に関して PHP をより成熟した言語にするという点で、多くの良いことを成し遂げました。 これを説明するために、PHP の新機能の非網羅的なリストを作成しました。
配列の分解:
[$a, $b] = $array;
null 合体演算子:
$value = $object->property ?? 'fallback if null';
$value = $array['foo'] ?? "fallback if key doesn't exists";
null 合体代入演算子:
public function get(string $input): string
return $this->cache[$input] ??= $this->sanitize($input);
配列拡散:
$a = [];
$b = [];
$mergedArray = [...$a, ...$b];
可変長関数:
public function get(Foo ...$foos): void
foreach($foos as $foo)
引数のアンパック:
$this->get(...$arrayOfFoo);
型付きプロパティ:
public int $intProperty;
ショート クロージャとも呼ばれるアロー関数:
$ids = array_map(fn(Post $post): int => $post->id, $posts);
ジェネレーター:
function make(array $input): Generator
foreach ($input as $item)
yield $this->doSomethingWith($item);
そして、もっとたくさん。 このリストから、PHP が今日も進化し続けていることが明らかであり、今後も優れた機能が追加されることを確信していただければ幸いです。
# PHP のパフォーマンス
5.* の時代には、PHP のパフォーマンスは…せいぜい平均的でした。 ただし、7.0 では、PHP のコアの大部分がゼロから書き直され、パフォーマンスが 2 倍または 3 倍向上しました。 さらに、各 7.* リリースは、パフォーマンスにプラスの影響を与えています。
言葉が足りませんが。 ベンチマークを見てみましょう。 幸いなことに、他の人々が PHP のパフォーマンスのベンチマークに多くの時間を費やしています。 Kinstaには適切な更新リストがあることがわかりました.
最新のパフォーマンス関連の機能はプリロードと呼ばれ、基本的に PHP コードのコンパイル済み部分をメモリに保存できます。 ここでいくつかのベンチマークを見ることができます。
PHP 8 が登場すると、JIT コンパイラーも自由に使えるようになり、興味深いパフォーマンスの改善が約束され、PHP が Web 開発以外の新しい分野に参入できるようになります。
# フレームワークとエコシステム
コミュニティによって行われたことに移る と PHP。 はっきりさせておきますが、逆に、PHP はもはや単なる WordPress ではありません。
一般に、2 つの主要な Web アプリケーション フレームワークと、Symfony と Laravel といういくつかの小さなフレームワークがあります。 もちろん、Laminas、Yii、Cake、Code Igniter などもありますが、最新の PHP 開発がどのようなものか知りたい場合は、最初の 2 つのうちの 1 つが適しています。
どちらのフレームワークにも、パッケージと製品の大規模なエコシステムがあります。 管理パネルや CRM からスタンドアロン パッケージ、CI からプロファイラー、Web ソケット サーバー、キュー マネージャー、支払い統合などの多数のサービスにまで及びます。 正直なところ、リストするには多すぎます。
これらのフレームワークは、実際の開発を目的としています。 純粋なコンテンツ管理が必要な場合は、WordPress、CraftCMS、Statamic などのプラットフォームがますます改善されています。
PHP のエコシステムの現在の状態を測定する 1 つの方法は、PHP のメイン パッケージ リポジトリである Packagist を調べることです。 それは指数関数的な成長を遂げました。 1 日 ±2,500 万回のダウンロードがあり、PHP エコシステムはかつてのように小さな弱者ではなくなったと言っても過言ではありません。
このグラフを見てください。時間の経過に伴うパッケージとバージョンの量がリストされています。 また、Packagist の Web サイトでも見つけることができます。

アプリケーション フレームワークと CMS に加えて、ここ数年で非同期フレームワークの台頭も見てきました。 これらは、ユーザーが真の非同期 PHP コードを実行できるようにする、PHP または他の言語で作成されたフレームワークとサーバーです。 いくつかの主要なプレーヤーは、Swoole、Amp、および ReactPHP です。
非同期の世界に足を踏み入れて以来、Web ソケットや大量の IO を使用するアプリケーションなどは、実際に PHP の世界に関連するようになりました。
libuv をコアに追加することについて、internals メーリング リストでも議論されています。 libuv を知らない人のために: これは、Node.js がすべての非同期性を許可するために使用するライブラリと同じです。 知るか? PHP 8 はそれをコアに追加するバージョンかもしれません!
# 最後に
ここ数年で PHP が大幅に進化し、PHP を使用してクリーンで保守可能なコードを完全に作成できることをお見せできたことを願っています。
最近出回っている PHP コードに興味がある場合は、私自身のプロジェクトの 1 つのソース コードと、私たちが個人的に管理している多くのオープン ソース パッケージをチェックしてください。
そのため、この言語には間違いなく欠点があり、20 年間の遺産があります。 私はそれを使って仕事をするのが楽しいと自信を持って言えます。
私の経験では、信頼性が高く、保守しやすく、高品質のソフトウェアを作成できます。 私が働いているクライアントは、最終結果に満足しています.
同意しませんか? 理由を教えてください! あなたは私に連絡することができます ツイッター または電子メール。
//platform.twitter.com/widgets.js