2012-06-16 67 views
0

我正在寫黑名單字檢查器。我命名的腳本blacklist_check.php和它看起來像這樣:如何從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函數嗎?

幫我解決這個問題的最佳做法!

回答

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"); 
+0

這從數據隱藏的角度來看並不正確。如果我在文件中重命名'$ black_list',那麼突然間,我必須在任何地方重命名它*我使用'is_black_listed'函數。 – bodacydo

+0

然後使用我喜歡的類:) – nickb

+1

我喜歡類的方法。我喜歡數據封裝! – bodacydo

相關問題