5

開発者が条件ルールで条件ステートメントを使用できるようにすることで、複雑な条件を処理できるバリデーターを作成しています。

一連のルールを使用したこの例を見てください。

...
"element_name":{
     "required": "conditional",
     "conditions" : {
         "requirements" : "(4 < 5)",
         "requirements" : "('something' == 'something_else')" 
     }
}
...

次に PHP が行うことは、それらをループし、requirementsそれらをコードとして評価して、要素が必要かどうかを判断するブール値を返すことです。

関数を使用する際の問題eval()は非常に明白です。条件ステートメントのみが許可されるものであることを考えると、これを行うより安全な方法はありますか?

$result = eval(element_name->requirements[0]);

君たちありがとう。

- - アップデート - - -

マイクとアイデアをくれたみんなに感謝します。正直に言うと、みんなのアイデアを少し使ってしまったので、みんなを答えとしてマークできたらいいのにと思います。マイクのより多くので、彼はそれを取得します。

したがって、これはフィールドを条件付きで検証する非常に魅力的な方法であるため、おそらく将来検討されることになるでしょう。私の目標は、これに関する直感的な方法を作成することです。私は、json 構成ファイル内で条件文を単純に平手打ちするというアイデアが気に入りました。もちろん、これには重大なセキュリティ リスクや非常に複雑な解析エンジンが伴うため、開発者に条件付き言語の方法を学習させることはやめましたが、ご覧のとおり、元の方法と非常に似たものにしました。シンプルな API を用意することが重要だと思います。そうしないと、プラットフォームでの開発が妨げられます。見てみな:

"element_name":{
     "required": "conditional",
     "conditions" : {
         "<" : ['4', '5'],
         "==" : [':element_id', ':other_element'], // will grab the values of those elements and compare
         "exp" : [['something', '==', 'something_else'], 'OR', [':other_element', '!=', '0']] 
     }
}
4

4 に答える 4

2

最初のテキストを分解するには、json_decode() を使用できますか? これは何も実行しませんが、大きな文字列を配列構造に変換します。

実際の個々の式については、parsekit_compile_stringにアクセスできますか?

これにより、生のテキストを PHP バイトコード ops に変換できます。switch ステートメントを介して ops を解釈するのは難しくありません。要件で期待しているとあなたが言ったことの制約された性質のために、これは多くのコードではありません。

なしで正規表現を試みることもできparsekit_compile_stringますが、これはより脆弱な解決策になります。

于 2013-07-26T01:20:27.020 に答える