0
<?php

class Validate
{
public $errors = array();

public function date($date)
{
    if(!strtotime($date))
    {
        $errors['date'] = "$date is not a valid date."; 
        //var_dump($errors);
    } else {
        return $date;
    }
}



public function get_errors()
{
    foreach($this->errors as $error => $val)
    {
        return $val."<br />\n";
    }

}



}


$validate = new Validate;
$validate->date('<20 Feb, 2013');
print $validate->get_errors();

$errorsそれらをブラウザに出力することをループする必要があります。そうではありません。$errors配列が次のステートメントで初期化されることは確かです。

var_dump($errors);

印刷:

array(1) { ["date"]=> string(34) "<20 Feb, 2013 is not a valid date." } 

画面へ。私は何が欠けていますか?

さまざまな形式の foreach コンストラクトを試しました。

foreach($this->errors as $this->error => $val)
    {
        return $val."<br />\n";
    }

foreach($this->errors as $this->error => $this->val)
    {
        return $this->val."<br />\n";
    }

しかし、喜びはありません!

4

3 に答える 3

0

関数は1回しか戻ることができません。ループして配列全体を返すことはできないため、配列全体を一度に返す方がよいでしょう。

public function get_errors()
{
  return $this->errors;
}

そして、それを完全に別の場所に出力します。

foreach($validate->get_errors() as $error => $val) {
  echo $val . "<br />"; // echo is the output command
}

またはそれをデバッグするには:

var_dump($validate->get_errors());
于 2013-02-16T15:06:24.160 に答える
0

まず、エラーメッセージを次$this->errorの代わりに割り当てる必要があり$errorます。

public function date($date) {
    if(!strtotime($date)) {
        $this->errors['date'] = "$date is not a valid date."; 
    } else {
        return $date;
    }
}

次に、エラー配列 ( return $val."<br />\n";) から最初のエラーを返しています。関数を使用array_valueして、配列からすべての値を取得できます。

public function get_errors() {
    return implode('<br />', array_values($this->errors));
}
// ...
print $validate->get_errors();
于 2013-02-16T15:02:48.260 に答える
0

あなたも言うことができます

public function get_errors() {
  return implode('<br>', $this->errors);
}
于 2013-02-16T15:12:46.570 に答える