2013-02-16 63 views
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阵列获取的通过声明初始化:环通过一个关联数组使用OOP PHP

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

如果'errors'属性是公共的,为什么你需要'get_errors()'方法?您可以直接访问您的财产,如'$ validate-> errors' – 2013-02-16 15:04:56

回答

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(); 
+0

这将返回:注意:数组到字符串转换在/var/www/PHP/booking_system/inc/validate.class.php在线36 数组 – cookie 2013-02-16 15:26:28

+0

我'我已经编辑了我的答案,现在'get_errors'返回由'
'分隔的错误消息作为单个字符串,之前它正在返回一个数组。 – Zbigniew 2013-02-16 15:28:32

+0

这真的很奇怪,它现在只用修改后的代码返回空格。我再次尝试var_dump($ errors);并且屏幕正式打印数组(1){[“date”] => string(34)“<2013年2月20日不是有效日期。” } – cookie 2013-02-16 15:32:38

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()); 
+0

我试过上面的,但我在浏览器中看到的所有内容都是空白的? – cookie 2013-02-16 15:19:29

0

你也可以说

public function get_errors() { 
    return implode('<br>', $this->errors); 
}