2011-07-14 8 views
0
require_once('classes/class.validation.php'); 

$array = $_POST['array']; 
$pass_profanity = false; 
$validation = new Validation; 
function check_for_profanity($input){ 
    if(is_array($input)){ 
     foreach($input as $row){ 
      if(is_array($row)){ 
       check_for_profanity($input); 
      } else { 
       $pass_profanity = $validation->check_for_profanity($row); 
      } 
     } 
    } else { 
     $pass_profanity = $validation->check_for_profanity($input); 
     return; 
    } 
    return; 
} 
check_for_profanity($array); 

しかし、私はエラーを取得:PHP変数のスコープのヘルプ

Notice: Undefined variable: validation in /Library/WebServer/Documents/file.php on line 22

Fatal error: Call to a member function check_for_profanity() on a non-object in /Library/WebServer/Documents/file.php on line 2

私はそれを把握することはできませんが、任意の考え?

ありがとうございます!

+0

を定義してください。 – Josh

答えて

2

+0

@FraserK 2つのアプローチのどちらをあなたはサスカの答えから行くでしたか? –

1

あなたは$ validation = new Validationを定義しています。関数の外部にある。したがって、PHPはそれが存在することを知らない。

function check_for_profanity($input){ 
    global $validation; 
    ... 
} 

をそれとも、より良い方法は、経由して、それを取得するために、次のようになります。あなたはglobalとあなたの関数内で変数へのアクセスを得ることができますいずれかPHP.net: Variable Scope

$validation = new Validation; 
function check_for_profanity($input){ 

    global $validation; 

    //The rest of your function 
} 
1

globalキーワードを使用しますパラメータ:

function check_for_profanity($input, $validation){ 
    ... 
} 

check_for_profanity($array, $validation); 

Rあなたの関数 `check_for_profanity`に` $ validation`を定義してください。PHP manual - variable scope詳細については、

+0

これは再帰的な関数なので、システムメモリを衰弱させることはないでしょうか? – FraserK

+0

@FraserK正直、私は知らない。私が知る限り、globalキーワードは基本的に '$ GLOBALS'配列を参照します。関数の再帰的性質は、globalキーワードを呼び出すたびにアプリケーションが常に同じオブジェクトを参照するため、影響を与えてはなりません。しかし、私はそれを事実として知らない。 –

+0

大丈夫:)私はちょうど再帰のレベルは、とにかく深く行くことができないことに気づいた:)ので、それは良いはずです – FraserK