使用OOP PHP循环关联数组

时间:2013-02-16 15:00:59

标签: php scope

<?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";
    }

但没有快乐!

3 个答案:

答案 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);
}