2011-07-09 10 views
2

私はフォームの検証をチェックする関数を持っています。エラーがある場合、$ errorという変数があります。関数の内部であろうとなかろうと、この関数とこのページの残りの部分の外に、どうすれば$エラーが設定されているのでしょうか?関数の外に渡す変数PHP

私は別のページに持ち越ししたくありません。私はグローバルがあることを知っていますが、私は関数内で$エラーを開始しているので、他の関数では利用できないと思います。

アイデア?

+0

グローバルではないグローバルにアクセス可能な変数が必要ですか? –

+0

一貫したアクセス可能な方法で、そのようなものを扱うフォームライブラリを探すことができます。 – hakre

答えて

2

あなたはsuperglobal $GLOBALS array PHP Manualを介してグローバル変数を設定して使用する場合:

$GLOBALS['error'] = value; 

配列はどこでも利用可能であること。だから気をつけてください。

+0

値が文字列である$ errorの場合、$ _GLOBALS ['error']は関数内で作成されていてもどこでも使用できます。いったん私は$ _GLOBALS ['error']を私の関数にセットするとそれは設定されていると見えますが、別の関数で同じものを呼び出すと、それが設定されているかどうかわかりません。もちろん、それを設定する初期関数の後に、後の関数を呼び出します。 – michael

+0

これはグローバルです。どこでも見ることができます(スーパーグローバルを通じて)。なぜあなたはそれを試してみませんか? –

+0

典型的なものです。質問に答えてダウン投票しました。はい、グローバルを使用するのは良い習慣ではありませんが、問題はどのようにしてコード内の検証結果*どこにでも*アクセスできます。 –

2

私は、$ errosが参照によって渡されるので、関数は、値の設定ができ、このよう
function validate($form, &$errors)
{
// some code that sets the erros variable
return false;
}

ことになるだろう。しかし、変数自体は呼び出しコードの範囲にとどまっています。

0

私はむしろそれを返し、そのcount()をチェックします(私は通常、配列にエラーを入れます)。それが0より大きい場合はエラーがあり、それ以外の場合はエラーはありません。

+0

それを返すと、最初の場所で元の関数と呼ばれるどのページでもその変数を使用できるようになりますか?問題は、検証をチェックしてエラーがあるかどうかを調べ、そうであればエラーメッセージを正しく表示するために別の関数にエラーを送信する機能です。だから、もし私が最後の関数でそれを返すのであれば、それを他の関数またはメインページに返しますか? – michael

+0

私はあなたの質問(あまりにも多くの)については少し不明です@。しかし、それは(内部呼び出し側の疑似コードの内部で)次のようなものです:errors = validate(...); count(errors)> 0ならばディスプレーエラー(errors)。 – LeleDumbo

1

エラーを記録する静的変数を持つフォームクラスがあります。たとえば:

<?php 
class form { 
    //this is our array to hold fields that have errored so we can apply an error class to the input fields 
    static public $errors = array(); 
    static public function setError($error) { 
    self::$errors[] = $error; 
    } 
    static public function parseErrors() { 
    $output .= '<ul>'; 
    foreach(self::$errors as $message) { 
     $output .= '<li>'.$message.'</li>'; 
    } 
    $output .= '</ul>'; 
    return $output; 
    } 
    //... other functions 
} 
?> 

は、その後、あなたの検証機能の中からエラーを記録するために、あなたはこのような何かを行うことができます。

<?php 
function myvalidate($value) { 
    // if this validation fails 
    form::setError('Field is required'); 
} 
?> 

は、それからちょうどあなたのエラーを吐き出すためにparseErrorsを呼び出します。これらは単なるスニペットであることに注意してください。私は実際にフォームクラスと対話するロガークラスを持っていて、統合のためにそれをいくつか変更しました。

私はGLOBALSを使用するよりもこのようなことが好きです。GLOBALSまたはSESSIONを使用すると、面倒な作業が必要になります。これは別のオプションです。

+0

さらに、field_nameにこれを渡して、これをさらに増やして、入力フィールドをターゲットにして、検証に失敗したときにフィールドに「エラー」クラスを追加することができます。 – iLLin

関連する問題