<?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
数组get是通过语句初始化的:
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";
}
但没有快乐!
答案 0 :(得分: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();
答案 1 :(得分: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());
答案 2 :(得分:0)
你也可以说
public function get_errors() {
return implode('<br>', $this->errors);
}