問題タブ [php-generators]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
php - 比較/演算子ブロックをリファクタリングして DRY アップし、CRAP レベルを下げる
ジェネレーターを返す一連のクラス (php 5.5) を中心に小さなプロジェクトを作成することに着手しました。
この小さなプロジェクトの主な動機は、TDD の旅を拡張し、ジェネレーターをいじり、後で使用するために packagist に投げることができるパッケージを用意することでした。
「プロジェクト」全体の現状はGithubで確認できます
すべてのテストは緑色で、メソッドは私が望むことを行います。重複が多いので、リファクタリングしたいと思います。
このクラスには getOdd という名前のメソッドもあります (そして、そうです ;) )
主な重複はクロージャー$Generator = function() ...
であり、違いは主+ - * /
に for ループ内の and 引数などの演算子です。これは、クラスの残りの部分でも主に同じです。
PHP で動的比較演算子を読んだところ、次のようなネイティブ メソッドは存在しないという結論に達しました。compare(...)
比較のためにプライベート/保護されたメソッドを作成する必要があります。もしそうなら、私はこれのために新しいクラス/関数を作るべきですか? 私はそれが現在のクラスに属しているとは思わない。
これを適切な方法で乾燥させる方法がわかりません。
ところで。getEven を知っていますが、getRange With step 関数を取得したときの getOdd はちょっとばかげていますが、それはより一般的なリファクタリング/パターンの質問です。
@github を更新 して getEven と getOdd を削除しました...
php - while を使用してジェネレーターを反復処理する
新しいプロジェクトの PDO ラッパーを作成しています。SQL の非常に一般的なパターンは、次のようなステートメントを作成することです。
私のラッパー関数は本質的にこれです:
while
しかし、上記のようにループを使用してこれを呼び出すと、値を使用できません。a を実行するvar_dump
と、それ$row
は Generator オブジェクトです。を使用するforeach
と、var_dump
予想どおり、データベースのデータが表示されます。を使用してジェネレーターをトラバースすることは単に不可能while
ですか、それともここでどこかで自分自身を混乱させましたか?
php - セッションに依存するより簡単なメニュー生成
私はウェブサイト言語のメニューを作成していますが、それは機能しますが、将来さらに言語を追加する場合に備えて、私が行っている方法は最善の方法ではないと思います. たぶん、誰かがより良い例を示すことができます。これが私が持っているものの一部です。
おそらく、foreach関数よりもいくつかの配列を実行する方が良いでしょうが、そのx、xの方法が混乱しすぎて方法がわかりません
php - 「データ出力ストリーム」に php yield / Generator::send() を使用する
yield を使用してデータ反復子を作成できることを知っています。たとえば、CSV ファイルからデータを読み取ることができます。
しかし、Generator::send() メソッドは、読み取りではなく順次書き込みに対して同じことができることを示唆しています。
たとえば、次のようなものを使用したい:
上記はうまくいくと思います。
しかし$output_generator->send(null);
、閉じるのは間違っているか、理想的ではないようです。これは、リテラルの null を送信できないことを意味します。これは csv 書き込みには問題ありませんが、null を送信するユースケースがあるかもしれません。
順次書き込みにphpジェネレーターを使用するための「ベストプラクティス」はありますか?