私は何年も前に時間をかけて Yar のパフォーマンスをいくつか改善しましたが、設計が不十分なために少し不快に感じる問題にも遭遇しました。並列 RPC の現在のメソッド プロトタイプは次のとおりです:
public static Yar_Concurrent_Client::call(string $uri, string $method, ?array $arguments = NULL, ?callable $callback = NULL, ?callable $error_callback = NULL, ?array $options = NULL):null|int|bool {}
一見するとわかりにくいでしょうか?
実際の使用プロセスでは、コールバック関数とエラー コールバック関数が空である可能性が非常に高くなります。これは、呼び出しが実際に開始できるとき、つまりループが再グローバルに指定されるときであるためです。 ##
Yar_Concurrent_Client::loop(?callable $callback = NULL, ?callable $error_callback = NULL, ?array $options = NULL):?bool {}そして、$options は呼び出しに応じて役立つことが多いため、実際に使用すると、多数の並列呼び出しコードがパラメーターに大量の NULL を書き込みます。
Yar_Concurrent_Clinet::call("https://xxx.com/api", "method", array("arguments"), NULL, NULL, array(YAR_OPT_HEADER=>array("header:val1")); Yar_Concurrent_Clinet::call("https://xxx.com/api", "method", array("arguments"), NULL, NULL, array(YAR_OPT_HEADER=>array("header:val2")); Yar_Concurrent_Clinet::call("https://xxx.com/api", "method", array("arguments"), NULL, NULL, array(YAR_OPT_HEADER=>array("header:val2")); Yar_Concurrent_Clinet::call("https://xxx.com/api", "method", array("arguments"), NULL, NULL, array(YAR_OPT_HEADER=>array("header:val4"));## と同様です。 # そこで私は、そのような呼び出しをよりエレガントにする方法を考えてきました。ポリモーフィズムを使用するか、次のような新しい API を追加したいと思ったこともあります:
public static Yar_Concurrent_Client::callArray(array $arguments):null|int|bool {}
しかし、私の強迫性障害のせいで、そうすることは困難だと感じました今朝突然、以前見たことのある RFC のことを思い出したので、ずっと探してみたところ、PHP5.6 の時点でコミットされていたことがわかりました。新しい機能についてほとんど調べておらず、あまり使用していません。みんなが何を言っているのか、使用されるかどうかはわかりません。 ?
は、今日紹介する最初の機能、引数のアンパックです。
引数の展開
PHP が可変パラメーター、つまり可変引数関数をサポートしていることはわかっています。たとえば、次の関数定義の場合:
function variadic(...$arguments) { var_dump($arguments); }
の定義に注意してください。これは、この関数を呼び出すときに渡すパラメーターの数に関係なく、これらのパラメーターは $arguments という名前の配列にパックされることを意味します:
variadic(); //output: array(0) { } variadic(NULL); //output: array(1) { [0]=> NULL } variadic("foo", "bar"); //output: array(2) { [0]=> string(3) "foo" [1]=> string(3) "bar" } variadic(NULL, array(), "dummy"); //output: array(3) { [0]=> NULL [1]=>[] [2]=> string(5) "dummy" }
もちろん、これは現在あるものではありません。この機能を使用するには、引数アンパックと呼ばれる、呼び出し時に使用される対応する兄弟形式もあります。
たとえば、上記の質問と同様に、関数を定義しました
function dummy($a, $b = NULL, $c = NULL, $d = NULL, $e = NULL) { var_dump($a, $b, $c, $d, $e); }
パラメータ b、c、d がほとんどの場合すべて NULL であるが、e を渡す必要がある場合は、引数のアンパックを使用して、コード内に多数の NULL パラメータが含まれるのを避けることができます。次のようになります。
$arguments = array( "First argument", NULL, NULL, NULL, "Fifth argument", ); dummy(...$arguments); //output: // string(14) "First argument" // NULL // NULL // NULL // string(14) "Fifth argument"
注 呼び出し時に... も使用しました。これは、... の後に配列をアンラップし、呼び出された関数に順番に渡すことを意味します。最初の要素は最初のパラメーターに対応し、2 番目の要素は要素は 3 番目のパラメータに対応します。
ただし、ここでの位置は充填位置に関連しており、インデックスとは何の関係もないことに注意してください。つまり:
$arguments = array( 4=> "First argument", 0=> "Fifth argument" ),
この形式では、インデックス 4 は依然として最初とみなされます。パラメータ。
これについて考えた後、Yar に新しいものを導入する必要がないことに突然気づきました。最もオープンな例は次のとおりです:
$arguments = array( "https://xxx.com/api", "method", array("arguments"), NULL, NULL, "options" => array(YAR_OPT_HEADER => array("header:val1") ) Yar_Concurrent_Clinet::call(...$arguments); $arguments["options"][YAR_OPT_HADER] = ["header:val2"]; Yar_Concurrent_Clinet::call(...$arguments); $arguments["options"][YAR_OPT_HADER] = ["header:val3"]; Yar_Concurrent_Clinet::call(...$arguments); $arguments["options"][YAR_OPT_HADER] = ["header:val4"]; Yar_Concurrent_Clinet::call(...$arguments); Yar_Concurrent_Clinet::call(...$arguments);
これで終わりだと思いますか?
上記のコードを考慮すると、中間配列を構築する必要があるという問題がまだあります。 ..
しかし実際には、PHP8.0 で導入された別の RFC、名前付きパラメータ:
名前付きパラメータ
PHP8.0 以降、ユーザーは次のことを許可されます。パラメータを渡すときにパラメータ名を指定します。たとえば、上記の関数の場合:
function dummy($a, $b = NULL, $c = NULL, $d = NULL, $e = NULL) { var_dump($a, $b, $c, $d, $e); }
呼び出し時に渡すパラメータ名を次のように指定できます。
dummy(a:"dummy", e:"foo"); //output: // string(5) "dummy" // NULL // NULL // NULL // string(3) "foo"
つまり、 a と e に渡されるパラメータを指定しました。指定されていない場合はデフォルト値が使用されます。宣言の順序以外でも実行できます。例:
dummy(e:"foo", a:"dummy");
出力結果同じです。
このようにして、最初のコードは次のようになります。
Yar_Concurrent_Client::call("https://xxx.com/api", "method", arguments:array("arguments"), options:array(YAR_OPT_HEADER=>array("header:val1"))); Yar_Concurrent_Client::call("https://xxx.com/api", "method", arguments:array("arguments"), options:array(YAR_OPT_HEADER=>array("header:val2"))); Yar_Concurrent_Client::call("https://xxx.com/api", "method", arguments:array("arguments"), options:array(YAR_OPT_HEADER=>array("header:val3"))); Yar_Concurrent_Client::call("https://xxx.com/api", "method", arguments:array("arguments"), options:array(YAR_OPT_HEADER=>array("header:val4")));
呼び出し時にあれやこれを渡すことができ、好きなように渡すことができます
コードはまだ引数のアンパックよりも少し長くなりますが、これにより、多くの NULL を書き込む必要がないという問題が解決され、新しい中間変数が導入されません。
つまり、問題は完全に解決されており、新しい API を導入する必要はありません:)
元のアドレス: https://www.laruence.com/2022 /05/10/ 6192.html推奨学習: 「PHP ビデオ チュートリアル
以上がPHP8.0 の機能の簡単な分析: 名前付きパラメーター (名前付きパラメーター)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

PHPは、現代のWeb開発、特にコンテンツ管理とeコマースプラットフォームで依然として重要です。 1)PHPには、LaravelやSymfonyなどの豊富なエコシステムと強力なフレームワークサポートがあります。 2)パフォーマンスの最適化は、Opcacheとnginxを通じて達成できます。 3)PHP8.0は、パフォーマンスを改善するためにJITコンパイラを導入します。 4)クラウドネイティブアプリケーションは、DockerおよびKubernetesを介して展開され、柔軟性とスケーラビリティを向上させます。

PHPは、特に迅速な開発や動的なコンテンツの処理に適していますが、データサイエンスとエンタープライズレベルのアプリケーションには良くありません。 Pythonと比較して、PHPはWeb開発においてより多くの利点がありますが、データサイエンスの分野ではPythonほど良くありません。 Javaと比較して、PHPはエンタープライズレベルのアプリケーションでより悪化しますが、Web開発により柔軟性があります。 JavaScriptと比較して、PHPはバックエンド開発により簡潔ですが、フロントエンド開発のJavaScriptほど良くありません。

PHPとPythonにはそれぞれ独自の利点があり、さまざまなシナリオに適しています。 1.PHPはWeb開発に適しており、組み込みのWebサーバーとRich Functionライブラリを提供します。 2。Pythonは、簡潔な構文と強力な標準ライブラリを備えたデータサイエンスと機械学習に適しています。選択するときは、プロジェクトの要件に基づいて決定する必要があります。

PHPは、サーバー側で広く使用されているスクリプト言語で、特にWeb開発に適しています。 1.PHPは、HTMLを埋め込み、HTTP要求と応答を処理し、さまざまなデータベースをサポートできます。 2.PHPは、ダイナミックWebコンテンツ、プロセスフォームデータ、アクセスデータベースなどを生成するために使用され、強力なコミュニティサポートとオープンソースリソースを備えています。 3。PHPは解釈された言語であり、実行プロセスには語彙分析、文法分析、編集、実行が含まれます。 4.PHPは、ユーザー登録システムなどの高度なアプリケーションについてMySQLと組み合わせることができます。 5。PHPをデバッグするときは、error_reporting()やvar_dump()などの関数を使用できます。 6. PHPコードを最適化して、キャッシュメカニズムを使用し、データベースクエリを最適化し、組み込み関数を使用します。 7

PHPが多くのWebサイトよりも優先テクノロジースタックである理由には、その使いやすさ、強力なコミュニティサポート、広範な使用が含まれます。 1)初心者に適した学習と使用が簡単です。 2)巨大な開発者コミュニティと豊富なリソースを持っています。 3)WordPress、Drupal、その他のプラットフォームで広く使用されています。 4)Webサーバーとしっかりと統合して、開発の展開を簡素化します。

PHPは、特にWeb開発の分野で、最新のプログラミングで強力で広く使用されているツールのままです。 1)PHPは使いやすく、データベースとシームレスに統合されており、多くの開発者にとって最初の選択肢です。 2)動的コンテンツ生成とオブジェクト指向プログラミングをサポートし、Webサイトを迅速に作成および保守するのに適しています。 3)PHPのパフォーマンスは、データベースクエリをキャッシュおよび最適化することで改善でき、その広範なコミュニティと豊富なエコシステムにより、今日のテクノロジースタックでは依然として重要になります。

PHPでは、弱い参照クラスを通じて弱い参照が実装され、ガベージコレクターがオブジェクトの回収を妨げません。弱い参照は、キャッシュシステムやイベントリスナーなどのシナリオに適しています。オブジェクトの生存を保証することはできず、ごみ収集が遅れる可能性があることに注意する必要があります。

\ _ \ _ Invokeメソッドを使用すると、オブジェクトを関数のように呼び出すことができます。 1。オブジェクトを呼び出すことができるように\ _ \ _呼び出しメソッドを定義します。 2。$ obj(...)構文を使用すると、PHPは\ _ \ _ Invokeメソッドを実行します。 3。ロギングや計算機、コードの柔軟性の向上、読みやすさなどのシナリオに適しています。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

Dreamweaver Mac版
ビジュアル Web 開発ツール

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール
