PHPのトランスデューサーは簡単になりました
詳細なPHP機能プログラミング:トランスデューサーの探索
機能的なプログラミングと高度な機能について聞いたことがあるかもしれませんが、トランスデューサーを知っていますか?この記事では、この強力なデータ変換ツールを調査します。
コアポイント:
-
Clojureに由来し、Michael DowlingによってPHPに移植されたトランスデューサーは、再利用可能なアルゴリズム変換を構築する強力な方法です。これらは、1つの削減関数を受け入れ、別の削減関数を返す関数です。
- PHPのトランスデューサーパッケージを使用すると、名前のイニシャルを大文字にしたり、ユーザーリストから未成年者を削除したりするなど、さまざまな方法でデータを変換できます。変換は、再利用のために単一のトランスデューサーに結合することができます。
- トランスデューサーの還元関数は、値をパラメーターとして受信し、「init」(init)、 "result"(最終結果)、および「ステップ」(縮小)ロジックを含む3つの要素を含む還元関数の配列を返します。
- トランスデューサーの利点は、データ変換プロセスを実際のデータソースから分離し、コードをよりモジュールで維持しやすくすることです。これらは、任意のデータソースで使用できる再利用可能なソフトウェアコンポーネントの作成を可能にします。ただし、機能的なプログラミングのルートにより、従来のPHP関数よりも複雑な場合があります。
トランスデューサーを理解するには、最初に還元剤を理解する必要があります。リッチなヒッキーを引用:
削減関数は、- これまでに結果を受信し、新しい入力を受け取り、次の結果を返す機能のタイプです。
reduce
トランスデューサーは、1つの減少関数を受信し、別の削減関数を返す関数です。トランスデューサーは、最初にリッチヒッキーによってClojureに紹介され、Michael DowlingによってPHPに移植されました。トランスデューサーは、さまざまな状況で再利用できるアルゴリズム変換を構築する強力な方法です。この記事では、一連の実用的な例を通じてその使用について説明します。
例
先に進む前に、コンポーザーを介してトランスデューサーパッケージをインストールする必要があります。
composer require mtdowling/transducers
class User { public $id; public $name; public $age; public function __construct($id, $name, $age) { $this->id = $id; $this->name = $name; $this->age = $age; } public function __toString() { return sprintf("\n%d - %s - %d", $this->id, $this->name, $this->age); } } // 示例数据 $data = [ new User(1, "younes", 24), new User(2, "youssef", 26), new User(3, "hamza", 25), new User(4, "ismail", 17), ];
use Transducers as t; $uppercase = t\map(function($user) { return new User($user->id, ucfirst($user->name), $user->age); }); $result = t\xform($data, $uppercase); var_dump($result);
関数は、PHPのmap
関数に似ています。この場合、ユーザー名の初期を大文字にする呼び出し可能な関数を渡します。 array_map
関数を使用して、xform
トランスデューサーを適用します。データを最初のパラメーターとして、トランスデューサーを2番目のパラメーターとして使用します。 uppercase
// 输出 array(4) { [0]=> object(User)#14 (3) { ["id"]=> int(1) ["name"]=> string(6) "Younes" ["age"]=> int(24) } [1]=> object(User)#15 (3) { ["id"]=> int(2) ["name"]=> string(7) "Youssef" ["age"]=> int(26) } [2]=> object(User)#16 (3) { ["id"]=> int(3) ["name"]=> string(5) "Hamza" ["age"]=> int(25) } [3]=> object(User)#17 (3) { ["id"]=> int(4) ["name"]=> string(6) "Ismail" ["age"]=> int(17) } }
データパラメーターと同じタイプの値を返します(この場合、配列)。アレイを厳密に出力する必要がある場合は、xform
を使用することもできます。 to_array
// ... $result = t\to_array($data, $uppercase); // ...
を使用して出力を文字列に変換するか、to_string
を使用して出力を特定のタイプに変換することもできます。詳細については、ドキュメントをご覧ください。 into($target, $coll, callable $xf)
composer require mtdowling/transducers
class User { public $id; public $name; public $age; public function __construct($id, $name, $age) { $this->id = $id; $this->name = $name; $this->age = $age; } public function __toString() { return sprintf("\n%d - %s - %d", $this->id, $this->name, $this->age); } } // 示例数据 $data = [ new User(1, "younes", 24), new User(2, "youssef", 26), new User(3, "hamza", 25), new User(4, "ismail", 17), ];
トランスデューサーの最良の部分は、複数の変換を1つのトランスデューサーに結合できることです。たとえば、ユーザー名の最初の文字を大文字にして、マイナーを削除しましょう。
use Transducers as t; $uppercase = t\map(function($user) { return new User($user->id, ucfirst($user->name), $user->age); }); $result = t\xform($data, $uppercase); var_dump($result);
filter
関数は、phpのarray_filter
関数に似ています。 comp
関数は、トランスデューサーリスト(この場合はuppercase
を使用して)およびmap
(removeMinors
を使用)からトランスデューサーを作成します。 filter
// 输出 array(4) { [0]=> object(User)#14 (3) { ["id"]=> int(1) ["name"]=> string(6) "Younes" ["age"]=> int(24) } [1]=> object(User)#15 (3) { ["id"]=> int(2) ["name"]=> string(7) "Youssef" ["age"]=> int(26) } [2]=> object(User)#16 (3) { ["id"]=> int(3) ["name"]=> string(5) "Hamza" ["age"]=> int(25) } [3]=> object(User)#17 (3) { ["id"]=> int(4) ["name"]=> string(6) "Ismail" ["age"]=> int(17) } }
transducer
を作成します
削減関数はパラメーターとして値を受信し、3つの要素を含む必要がある一連の削減関数を返します。
- :トランスデューサーの初期値を返す関数。初期値が提供されていない場合、最初の呼び出しでのみ呼び出されます。
-
init
: - 関数は、コールスタックから最終結果を構築するために使用されます。
result
result
:これは、削減ロジックを書く場所です。削減ロジックに応じてゼロまたは複数回呼び出すことができます。 -
step
これは実際のコードなしでは非常に混乱しているので、例として
take
// ... $result = t\to_array($data, $uppercase); // ...
use Transducers as t; $uppercase = t\map(function($user) { return new User($user->id, ucfirst($user->name), $user->age); }); $result = t\to_string($data, $uppercase); var_dump($result);
take
// 输出 string(64) " 1 - Younes - 24 2 - Youssef - 26 3 - Hamza - 25 4 - Ismail - 17"
および コールバックを呼び出すか、単に値を返すかどうかを決定できます。
php FAQ
PHPでトランスデューサーを学習するために利用可能な多くのリソースがあります。 SitePointの記事など、オンラインの記事やチュートリアルを読むことから始めることができます。また、トピックをより深くカバーする本やオンラインコースもあります。最後に、独自のトランスデューサーを書いて、PHPプロジェクトでそれらを使用してみてください。 はい、トランスデューサーの概念はClojureプログラミング言語に由来し、その後JavaScriptやPHPなど、他のいくつかの言語で採用されています。各言語は独自の方法でトランスデューサーを実装しますが、基本概念は同じです。 はい、PHPの内蔵配列関数を備えたトランスデューサーを使用できます。ただし、これらの機能は、特に大きな配列を扱う場合、トランスデューサーを使用するほど効率的ではない場合があることを忘れないでください。これは、通常、PHPの配列関数が新しい配列を作成し、トランスデューサーがデータを配置できるためです。 以上がPHPのトランスデューサーは簡単になりましたの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。take
パラメーターを使用して複数回呼び出されます。呼び出されるたびに、result
変数を減少させ、ゼロ未満であるかどうかをテストします。この場合、ストップポイントを表すAinput
オブジェクトインスタンスを返します。 remaining
Reduced
トランスデューサー関数の例は、データから空の要素を削除します。 Transducerの仕組みの以前の説明を使用して、$input
step
$uppercase = t\map(function($user) {
return new User($user->id, ucfirst($user->name), $user->age);
});
$removeMinors = t\filter(function($user) {
return $user->age >= 18;
});
$comp = t\comp(
$uppercase,
$removeMinors
);
$result = t\to_string($data, $comp);
var_dump($result);
$data
// 输出
string(48) "
1 - Younes - 24
2 - Youssef - 26
3 - Hamza - 25"
// ....
$comp = t\comp(
$uppercase,
$removeMinors,
t\take(2)
);
$result = t\to_string($data, $comp);
var_dump($result);
PHPのトランスデューサーの基本概念は何ですか?
PHPのトランスデューサーは、構成可能で再利用可能なソフトウェアコンポーネントを作成できるデータ処理テクノロジーです。それらは本質的に、還元剤を受け入れ、新しい還元剤を返す関数です。この概念は、ClojureとJavaScriptから借用されており、PHPに適応しています。トランスデューサーを使用すると、データ変換プロセスを実際のデータソースから分離し、コードをよりモジュール化し、維持しやすくします。
従来のPHP関数は、通常、データを取得および変換するプロセスを組み合わせて、維持と再利用が困難になる可能性があります。一方、トランスデューサーは2つのプロセスを分離します。つまり、特定の方法でデータを変換するトランスデューサーを作成し、任意のデータソースで使用して、コードをより柔軟で再利用可能にすることができます。
もちろん、簡単な例を考えてみましょう。数字の配列があり、各番号に1を追加するとします。これを行うトランスデューサーを作成できます:composer require mtdowling/transducers
トランスデューサーは、任意のデータソースとともに使用するように設計されています。これは、データソースレベル全体ではなく、単一のデータアイテムレベルで実行されるためです。したがって、アレイ、データベースクエリの結果、ネットワーク接続からのデータストリームなどのトランスデューサーを使用できます。唯一の要件は、データソースが減少関数で動作できる必要があることです。
トランスデューサーは多くの利点を提供します。データ変換プロセスを実際のデータソースから分離することができ、コードがよりモジュール式でメンテナンスを容易にすることができます。また、任意のデータソースで使用できる再利用可能なソフトウェアコンポーネントを作成することもできます。最後に、トランスデューサーは単一のデータ項目で動作するため、大規模なデータセットを扱うときに、従来のPHP関数よりも効率的になる場合があります。
トランスデューサーは多くの利点を提供しますが、従来のPHP関数よりも複雑な場合もあります。これは、一部のPHP開発者に馴染みのない機能的プログラミングの概念を伴うためです。しかし、トランスデューサーがどのように機能するかを理解すると、それらはクリーンで効率的で再利用可能なコードを書くための強力なツールになります。
はい、トランスデューサーは任意のPHPフレームワークで使用できます。これらは、特定のフレームワーク機能に依存しない一般的なデータ処理テクノロジーです。ただし、一部のフレームワークでは、トランスデューサーを処理するための独自のユーティリティを提供する場合があります。これにより、使いやすくなります。
PHPのトランスデューサーの詳細についてはどうすればよいですか?
トランスデューサーは他のプログラミング言語で使用されていますか?
PHP内蔵配列関数を備えたトランスデューサーを使用できますか?

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

セッションハイジャックは、次の手順で達成できます。1。セッションIDを取得します。2。セッションIDを使用します。3。セッションをアクティブに保ちます。 PHPでのセッションハイジャックを防ぐための方法には次のものが含まれます。1。セッション_regenerate_id()関数を使用して、セッションIDを再生します。2。データベースを介してストアセッションデータを3。

PHP開発における固体原理の適用には、次のものが含まれます。1。単一責任原則(SRP):各クラスは1つの機能のみを担当します。 2。オープンおよびクローズ原理(OCP):変更は、変更ではなく拡張によって達成されます。 3。Lischの代替原則(LSP):サブクラスは、プログラムの精度に影響を与えることなく、基本クラスを置き換えることができます。 4。インターフェイス分離原理(ISP):依存関係や未使用の方法を避けるために、細粒インターフェイスを使用します。 5。依存関係の反転原理(DIP):高レベルのモジュールと低レベルのモジュールは抽象化に依存し、依存関係噴射を通じて実装されます。

phpstormでCLIモードをデバッグする方法は? PHPStormで開発するときは、PHPをコマンドラインインターフェイス(CLI)モードでデバッグする必要がある場合があります。

記事では、入力検証、認証、定期的な更新など、脆弱性から保護するためのフレームワークの重要なセキュリティ機能について説明します。

システムが再起動した後、UnixSocketの権限を自動的に設定する方法。システムが再起動するたびに、UnixSocketの許可を変更するために次のコマンドを実行する必要があります:sudo ...

php8.1の列挙関数は、指定された定数を定義することにより、コードの明確さとタイプの安全性を高めます。 1)列挙は、整数、文字列、またはオブジェクトであり、コードの読みやすさとタイプの安全性を向上させることができます。 2)列挙はクラスに基づいており、トラバーサルや反射などのオブジェクト指向の機能をサポートします。 3)列挙を比較と割り当てに使用して、タイプの安全性を確保できます。 4)列挙は、複雑なロジックを実装するためのメソッドの追加をサポートします。 5)厳密なタイプのチェックとエラー処理は、一般的なエラーを回避できます。 6)列挙は魔法の価値を低下させ、保守性を向上させますが、パフォーマンスの最適化に注意してください。
