[解決済み] phpでevalが悪になるのはどんなとき?
2023-04-24 11:11:33
質問
私がPHPで開発している間、常に
eval()
を使うのは悪いことだといつも聞いています。
次のコードを考えると、2番目の(そしてよりエレガントな)オプションを使うのが理にかなっていると思いませんか?もしそうでなければ、なぜですか?
// $type is the result of an SQL statement, e.g.
// SHOW COLUMNS FROM a_table LIKE 'a_column';
// hence you can be pretty sure about the consistency
// of your string.
$type = "enum('a','b','c')";
// option one
$type_1 = preg_replace('#^enum\s*\(\s*\'|\'\s*\)\s*$#', '', $type);
$result = preg_split('#\'\s*,\s*\'#', $type_1);
// option two
eval('$result = '.preg_replace('#^enum#','array', $type).';');
どのように解決するのですか?
eval()を純粋な悪と呼ぶことには慎重でなければなりませんね。 動的な評価は強力なツールであり、時には命の恩人になることができます。eval()を使えば、PHPの欠点(下記参照)を回避することができます。
eval()の主な問題点は以下の通りです。
- 安全でない入力の可能性がある。 信頼できないパラメータを渡すことは、失敗することになります。パラメータ(またはその一部)が完全に信頼されていることを確認するのは、しばしば些細なことではありません。
- だまし討ち。 eval()を使うとコードが巧妙になり、従ってフォローするのが難しくなります。Brian Kernighan "の言葉を引用します。 デバッグは、そもそもコードを書くことの2倍大変です。したがって、コードをできるだけ巧妙に書くと、定義上、デバッグするのに十分な賢さがないことになります。 "。
eval()を実際に使用した場合の主な問題点は1つだけです。
- 十分な考慮なしに使用する経験の浅い開発者。
経験則として、私はこれに従う傾向があります。
- eval()が唯一/正しい解決策であることがあります。
- ほとんどの場合、他のものを試すべきです。
- 確信が持てない場合は、2.に進みます。
- Else, 非常に、非常に注意してください。
関連
-
[解決済み】警告。数値でない値に遭遇しました
-
[解決済み] PHPで配列から要素を削除する
-
[解決済み] PHPでSQLインジェクションを防ぐにはどうしたらいいですか?
-
[解決済み] PHPでHTML/XMLをパースして処理する方法とは?
-
[解決済み] どのような場合に '$this' よりも 'self' を使うべきですか?
-
[解決済み] PHPのエラーを表示させるにはどうしたらいいですか?
-
[解決済み] PHPのstartWith()関数とendsWith()関数
-
[解決済み】PHPの'foreach'は実際どのように動作するのですか?
-
[解決済み] リファレンス - このシンボルはPHPで何を意味するのですか?
-
[解決済み】JavaScriptのeval()が悪でないのはどんなとき?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] [Solved] Fatal error: メンバ関数prepare()のNULLでの呼び出し
-
[解決済み】「初期通信パケットの読み込み」でMySQLサーバーに接続できなくなり、システムエラーになる。0
-
[解決済み】XAMPPのphpMyAdminで「設定にあるcontroluserの接続に失敗しました。
-
[解決済み】Xampp ローカルホスト/ダッシュボード
-
[解決済み] php5パッケージのインストール候補がない (Ubuntu 16.04)
-
[解決済み] $wpdb->update または $wpdb->insert を実行すると、引用符の前にスラッシュが追加される
-
[解決済み] SQLSTATE[HY093]: 無効なパラメータ番号: パラメータが定義されていません
-
[解決済み】PHPのクラスが見つからないが、インクルードされている
-
[解決済み] mysqli_fetch_assoc() は、パラメータ 1 が mysqli_result であることを期待し、boolean が与えられる [重複] 。
-
[解決済み】PHPのcURLとは何ですか?