如何从PHP中的同一文件中的函数访问文件范围中定义的数组?

时间:2012-06-16 00:18:26

标签: php scope

我正在写一个黑名单单词检查器。我将脚本命名为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函数中吗?我不想这样做,因为在我调用函数时总是会创建数组,而不是在我需要(或包含)脚本时只有一次!

我应该在global $black_list函数中使用is_black_listed吗?

帮助我解决这个问题的最佳做法!

1 个答案:

答案 0 :(得分: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");