0

ブラックリストワードチェッカーを書いています。スクリプトに名前を付けましたblacklist_check.php。次のようになります。

<?php
$black_list = [
  'ass',
  'anus',
  /* many others that i skipped here */
];

function is_black_listed ($word) {
  return in_array($word, $black_list);
}
?>

ただし、is_black_listed関数を使用すると、常に取得されWarning: in_array() expects parameter 2 to be array, null givenます。

配列を関数$black_list内に配置する必要がありますか? is_black_listedスクリプトを必要とする (または含める) ときに 1 回だけではなく、関数を呼び出すと常に配列が作成されるため、そうしたくありません。

関数global $black_list内で使用する必要がありますか?is_black_listed

この問題を解決するためのベスト プラクティスを教えてください。

4

1 に答える 1

3

グローバル変数は使用しないでください。メンテナンスが非常に難しく、コードが読みにくくなります。代わりに、配列を関数に渡すだけです。

function is_black_listed ($word, $black_list)

次に、次のように呼び出します。

is_black_listed( "bad words!", $black_list);

さらに良いことに、これを行うクラスを作成し、配列をメンバー変数として作成します。

class WordFilter {
    private $black_list = [ ... ];

    function __construct( $words = array()) {
        // Optionally add dynamic words to the list
        foreach( $words as $word) 
            $black_list[] = $word;
    }

    function is_black_listed( $word) {
        return in_array( $word, $this->black_list);
    }
}

$filter = new WordFilter( array( 'potty', 'mouth'));
$filter->is_black_listed( "bad");
于 2012-06-16T00:19:24.250 に答える