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

首先,您必须将错误消息分配给$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 $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

你也可以说

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