2013-02-16 67 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); 
}