exec() と eval() の落とし穴: 非 Web アプリケーションにおける危険性を明らかにする
exec() の使用に対する繰り返しの警告にもかかわらず) と eval() ですが、それらを回避する理由は依然としてわかりません。この記事は、非 Web アプリケーションであっても、これらの関数が一般的に嫌われる理由を明らかにすることを目的としています。
明確さとテスト容易性
exec( を使用することの 1 つの重大な欠点) ) と eval() は、混乱を招き、追跡が困難なコードになる可能性があるという点です。これらの関数は、コードを含む文字列を動的に実行または評価するため、プログラムのフローに従うことが困難になります。
例:
次のコード スニペットを考えてみましょう。
for key, val in values: fieldName = valueToFieldName[key] fieldType = fieldNameToType[fieldName] if fieldType is int: s = 'object.%s = int(%s)' % (fieldName, fieldType) # Many clauses like this... exec(s)
このコードは簡単そうに見えますが、新しい型が追加されるとすぐに扱いにくくなります。さらに、exec() の呼び出し中にエラーが発生することが多く、エラーを解決するためのコンテキストがほとんど提供されないため、デバッグが問題になります。
コードの明瞭性の原則に違反します
次のいずれかコーディングの基本原則は、コードの各行をその周囲を調べることで簡単に理解できるようにすることです。 exec() と eval() はこの原則に違反しているため、コードがプログラム全体に散在し、理解と保守が困難になります。
結論:
実行中() と eval() は便利なショートカットを提供する可能性がありますが、曖昧さと複雑さをもたらす可能性が見かけの効率を上回ります。明確でテスト可能、保守可能なコードを実現するには、一般に、これらの関数の使用を避け、コードの明確さと理解を促進する、より直接的な代替手段を選択することをお勧めします。
以上がWeb 以外のアプリケーションで `exec()` と `eval()` を避けるべきなのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。