開発者の Brent は、2019 年の PHP がどのようなものであるかを詳しく説明した記事を公開しました。
Brent 氏は、多くのコア関数のメソッド署名が依然として一貫性がなく、構成設定が依然として混乱しているなど、PHP にはまだいくつかの問題があることを認めましたが、彼自身の記事では開発経験の観点から、彼は Web 開発には PHP が最適であると信じています。PHP を使用すると、信頼性が高く保守しやすい高品質のアプリケーションを作成でき、彼自身も顧客も最終結果に満足しています。 (推奨される調査: PHP7 テクノロジ トピック )
記事の中で、Brent は長年にわたる PHP の開発の良い側面に焦点を当てており、いくつかの点を通して「PHP は10 年前はひどい言語ではありませんでした ”:
#● PHP は活発に開発されており、毎年新しいバージョンがリリースされます● PHP 5 以降、パフォーマンスは常に向上しています改善● フレームワーク、パッケージ、プラットフォームで構成される非常にアクティブな言語エコシステムがあります#● PHP は継続的に開発されており、ここ数年で多くの新機能が追加されました
● これまでにさまざまな開発ツールが開発されてきました 数年かけて成熟し、成長を続けています
PHP の開発は活発に行われており、毎年新しいバージョンがリリースされます#現在の PHP バージョンは昨年 12 月にリリースされた 7.3 ですが、7.4 は今年末にリリースされる予定で、PHP 8.0 は 7.4 の次のバージョンになります。
5.X 時代以来、コア チームは毎年新しいバージョンをリリースしたいと考えており、過去 4 年間、そのようなリリース サイクルを維持することに成功しました。通常、各新しいバージョンは 2 年間正式にアクティブにサポートされ、その後 1 年間はセキュリティ修正のみが提供されます。これは、PHP 開発者が可能な限り最新の状態を保つよう奨励することを目的としています。
より具体的なリリースおよびメンテナンス サイクルについては、PHP 公式 Web サイトの概要をご覧ください:
https://www.php .net/supported-versions.php
上の表を見ると、バージョン番号が 5 から 7 に跳ね上がっていることがわかります。それでは、PHP 6 はどこに行ったのでしょうか?
ところで、ポピュラーサイエンスの話をしてみましょう。実際、2005 年には PHP コミュニティが PHP 6 を開始しました。しかし、Unicode の実装が困難だったため、プロジェクトは最終的に中止されました。PHP 関係者は PHP 6 GA をリリースせず、2010 年に PHP 6 をキャンセルしました。 PHP 6 プロジェクトは中止されましたが、実装された機能の多くは PHP 5 に統合されました。 PHP 6 はキャンセルされましたが、このメジャー バージョンの以前の開発は PHP 6 という名前で行われていたため、多くの参考資料や書籍ではこのバージョンを指すために「PHP 6」を使用しています。関係者は、PHP 6 を放棄した後にこれが混乱を引き起こすのではないかと心配したため、単に PHP 6.X のバージョン番号を使用せず、5 から 7 に直接ジャンプしました。 詳細については、公式の手順を確認してください:https://wiki.php.net/rfc/php6
#PHP 7.0 では、PHP のコア部分が完全に書き直され、最新の Zend エンジンが導入され、PHP のパフォーマンスが 2 ~ 3 倍向上しました。
著者はこの点を説明するために https://kinsta.com/blog/php-benchmarks のベンチマーク テストを引用し、7.0 以降、PHP のパフォーマンスが向上し、PHP Web アプリケーションと Web フレームワークのパフォーマンスが向上していることを指摘しました。他の言語では、パフォーマンスが一部のケースよりもはるかに優れています。しかし彼はまた、「もちろん、PHP フレームワークは C や Rust よりも優れているわけではありませんが、Rails や Django よりははるかに優れており、ExpressJS に匹敵します。」非常にアクティブなフレームワークがあります。 、パッケージ、およびプラットフォーム 言語の生態系
PHP フレームワークに関して言えば、WordPress について言及する必要がありますが、著者は、WordPress は現在の PHP 生態系を明らかに表していないと述べています。もはや WordPress だけです。」
現在、PHP には 2 つの主要な Web アプリケーション開発フレームワーク (Symfony と Laravel、Zend、Yii、Cake、Code Igniter) があり、さらに多くの小さなフレームワークもあります。 Symfony と Laravel には、管理パネルと CRM、独立したソフトウェア パッケージ、CI、アナライザー、Web ソケット サーバー、キュー マネージャー、支払い統合などを含む、巨大なパッケージとソフトウェア エコシステムがあります。 さらに、近年では PHP 非同期フレームワークも登場しており、その中でも Swoole、Amp、ReactPHP が最適であり、真の非同期 PHP を実行するために PHP またはその他の言語で書かれたフレームワークとサーバーです。著者は、PHP エコシステムの現在の状態を測定する 1 つの方法は、メインの PHP パッケージ リポジトリである Packagist からのデータを調べることだと考えています。次の傾向グラフを見ると、ソフトウェア パッケージの数が急激に増加しており、現在登録されているソフトウェア パッケージ数は 223,217、インストール総数は 14,827,204,847 に達しており、PHP エコシステムは以前ほど弱くはありません。
#さまざまなバージョンの利用可能なパッケージの数 1 か月あたりにインストールされるパッケージの数 さらに、PHP の使用統計と市場での位置付けに関する最新データも確認できます: #//m.sbmmt.com/toutiao-418943。 htmlPHP は常に進化しており、ここ数年で多くの新機能が追加されましたasync と await という 2 つの非常に要望の高い機能ですが、しかし、近年では PHP の新機能が次々と登場し、言語自体もさまざまな面で改良されています。
以下に、多くの注目を集めている新しい PHP 機能の一部を示します。
● ショート クロージャショート クロージャ、別名:アロー関数 。これは、PHP で短い関数を記述する方法です。クロージャは、array_map や array_filter などの関数に渡すと非常に便利です。
// A collection of Post objects $posts = [/* … */]; $ids = array_map(fn($post) => $post->id, $posts);
Null 合体演算子。三項演算子に似ていますが、左側のオペランドは単にブール値を使用するのではなく、isset のように動作します。 。このため、この演算子は配列に対して特に便利です。また、変数が設定されていない場合には、デフォルト値が割り当てられます。
$undefined ?? 'fallback'; // 'fallback' $unassigned; $unassigned ?? 'fallback'; // 'fallback' $assigned = 'foo'; $assigned ?? 'fallback'; // 'foo' '' ?? 'fallback'; // '' 'foo' ?? 'fallback'; // 'foo' '0' ?? 'fallback'; // '0' 0 ?? 'fallback'; // 0 false ?? 'fallback'; // false
Trait は、単一継承の制限の一部を軽減できるコードを再利用するためのメカニズムです。特性とクラスを組み合わせるセマンティクスは、複雑さを軽減し、多重継承とミックスインに関連する典型的な問題を回避する方法を定義します。
トレイトはクラスに似ていますが、きめ細かく一貫した方法で関数をグループ化するためにのみ使用されます。これは従来の継承を補足するものであり、動作の水平結合を実現できます。クラス メンバー アプリケーションは必要ありません継承。
<?php trait ezcReflectionReturnInfo { function getReturnType() { /*1*/ } function getReturnDescription() { /*2*/ } } class ezcReflectionMethod extends ReflectionMethod { use ezcReflectionReturnInfo; /* ... */ } class ezcReflectionFunction extends ReflectionFunction { use ezcReflectionReturnInfo; /* ... */ } ?>
#型付きプロパティ、クラス変数は、次のような型を定義できます。
class A { public string $name; public Foo $foo; }
Expand 演算子。これは、呼び出し内でパラメーターを直接解凍できる新しい構文です。たとえば、
call_user_func_array([$db, 'query'], array_merge(array($query), $params));
配列 $params は、新しい構文を使用して直接展開できます:
$db->query($query, ...$params);
#JIT は、コードを中間状態として表現し、実行時にそれを中間状態に変換するコンパイラー戦略です。アーキテクチャに依存するマシンコードに変換され、オンザフライで実行されます。 PHP では、これは、JIT が Zend VM によって生成された命令を中間表現として扱い、アーキテクチャに依存するマシン コードで実行することを意味します。つまり、コードをホストするのはもはや Zend VM ではなく、基盤となる CPU です。
外部関数インターフェイス。純粋なスクリプト言語から C 関数を呼び出し、C データ型を使用できるため、「システム」コードをより効率的に開発できます。 。 PHP の場合、FFI は純粋な PHP を使用して PHP 拡張機能を作成し、C ライブラリにバインドする方法を開きます。 #● 匿名クラス
単純な 1 回限りのオブジェクトを作成するための匿名クラス:<?php // Pre PHP 7 code class Logger { public function log($msg) { echo $msg; } } $util->setLogger(new Logger()); // PHP 7+ code $util->setLogger(new class { public function log($msg) { echo $msg; } });
戻り値の型の宣言:
<?php function sum($a, $b): float { return $a + $b; } // Note that a float will be returned. var_dump(sum(1, 2)); ?>
Strict モード: <?php
declare(strict_types=1);
function sum($a, $b): int {
return $a + $b;
}
var_dump(sum(1, 2));
var_dump(sum(1, 2.5));
?>
Libsodium をコア拡張機能にします。Libsodium は最新の拡張機能です。サイドチャネルの脆弱性を回避するためにセキュリティ専門家によって慎重に選択された暗号化アルゴリズムで構成される暗号化ライブラリ。
##● ジェネレーター
ジェネレーターは、反復子を実装するための単純でボイラープレートのない方法を提供します。 ここ数年でさまざまな開発ツールが成熟し、成長を続けている最後に著者は、現在のPHP開発ツールも成熟し、成長を続けていると分析しました。
彼は例として、Psalm、Phan、PHPStan などの静的アナライザーを使用しました。これらのツールは、PHP コードを静的に分析し、あらゆるタイプのエラーやバグの可能性を報告します。これらが提供する機能はある程度 TypeScript の機能に匹敵しますが、現在 PHP はトランスパイルを提供していないため、カスタム構文は許可されません。これは、PHP 開発がドキュメントに依存する必要があることを意味しますが、実際、PHP の作成者であるラスムス レルドルフ氏は、コアに静的解析エンジンを追加するというアイデアについて言及したことがあります。受到 JavaScript 社区的启发,目前 PHP 也有在进行转换的相关研发,比如项目 Pre,它允许新的 PHP 语法转换为普通的 PHP 代码。虽然这个想法已经在 JavaScript 中被证明可行,但作者认为在 PHP 中,只有先提供了适当的 IDE 和静态分析支持,它才有可能实现。
讲完了 PHP 当前的这些变化,作者最后没有以“PHP 是世界上最好的语言”作结语,相反,他是这样说的:
All that being said, feel free to still think of PHP as a crappy language... I can say in confidence that I enjoy working with it.
话虽如此,但是还要继续认为 PHP 是蹩脚的语言那也是可以的。我可以很自信地说我喜欢 PHP。