私はフォームの検証をチェックする関数を持っています。エラーがある場合、$ errorという変数があります。関数の内部であろうとなかろうと、この関数とこのページの残りの部分の外に、どうすれば$エラーが設定されているのでしょうか?関数の外に渡す変数PHP
私は別のページに持ち越ししたくありません。私はグローバルがあることを知っていますが、私は関数内で$エラーを開始しているので、他の関数では利用できないと思います。
アイデア?
私はフォームの検証をチェックする関数を持っています。エラーがある場合、$ errorという変数があります。関数の内部であろうとなかろうと、この関数とこのページの残りの部分の外に、どうすれば$エラーが設定されているのでしょうか?関数の外に渡す変数PHP
私は別のページに持ち越ししたくありません。私はグローバルがあることを知っていますが、私は関数内で$エラーを開始しているので、他の関数では利用できないと思います。
アイデア?
あなたはsuperglobal $GLOBALS
array PHP Manualを介してグローバル変数を設定して使用する場合:
$GLOBALS['error'] = value;
配列はどこでも利用可能であること。だから気をつけてください。
値が文字列である$ errorの場合、$ _GLOBALS ['error']は関数内で作成されていてもどこでも使用できます。いったん私は$ _GLOBALS ['error']を私の関数にセットするとそれは設定されていると見えますが、別の関数で同じものを呼び出すと、それが設定されているかどうかわかりません。もちろん、それを設定する初期関数の後に、後の関数を呼び出します。 – michael
これはグローバルです。どこでも見ることができます(スーパーグローバルを通じて)。なぜあなたはそれを試してみませんか? –
典型的なものです。質問に答えてダウン投票しました。はい、グローバルを使用するのは良い習慣ではありませんが、問題はどのようにしてコード内の検証結果*どこにでも*アクセスできます。 –
私は、$ errosが参照によって渡されるので、関数は、値の設定ができ、このよう
function validate($form, &$errors)
{
// some code that sets the erros variable
return false;
}
ことになるだろう。しかし、変数自体は呼び出しコードの範囲にとどまっています。
私はむしろそれを返し、そのcount()をチェックします(私は通常、配列にエラーを入れます)。それが0より大きい場合はエラーがあり、それ以外の場合はエラーはありません。
それを返すと、最初の場所で元の関数と呼ばれるどのページでもその変数を使用できるようになりますか?問題は、検証をチェックしてエラーがあるかどうかを調べ、そうであればエラーメッセージを正しく表示するために別の関数にエラーを送信する機能です。だから、もし私が最後の関数でそれを返すのであれば、それを他の関数またはメインページに返しますか? – michael
私はあなたの質問(あまりにも多くの)については少し不明です@。しかし、それは(内部呼び出し側の疑似コードの内部で)次のようなものです:errors = validate(...); count(errors)> 0ならばディスプレーエラー(errors)。 – LeleDumbo
エラーを記録する静的変数を持つフォームクラスがあります。たとえば:
<?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を使用すると、面倒な作業が必要になります。これは別のオプションです。
さらに、field_nameにこれを渡して、これをさらに増やして、入力フィールドをターゲットにして、検証に失敗したときにフィールドに「エラー」クラスを追加することができます。 – iLLin
グローバルではないグローバルにアクセス可能な変数が必要ですか? –
一貫したアクセス可能な方法で、そのようなものを扱うフォームライブラリを探すことができます。 – hakre