我有這個類防止父類「遺忘」本地變量兒童設置:PHP
class Validator implements iValidation{
protected
$_fields,
$_errors;
public function __construct($fields){
$this->_errors = array();
$this->_fields = $fields;
}
public function validate(){
$map = unserialize(iValidation::map);
foreach ($this->_fields as $field_type => $data){
if (array_key_exists($field_type, $map)){
$class = "Validate_{$map["$field_type"]}" ;
$object = new $class($data);
$object->validate();
unset($object);
}
}
}
public function getErrors(){
return $this->_errors;
}
}
現在,這個類遍歷數組的形式給出
$admin_test_data = array(
"firstname" => "Alex1",
"surname" => "Morley-Finch",
"username" => "alex123",
"password" => "cheese",
"re_password" => "cheese",
"email_address" => "alex54353hotmail.co.uk",
"user_type" => "ADMIN",
"add_admin" => "Add Admin",
);
我有一張地圖,描述了每個字段的驗證類型,聲明如下:
define(
"VALIDATION_MAP",
serialize(
array(
// FIELD => VALIDATION TYPE
"firstname" => "Name",
"surname" => "Name",
"agency_name" => "Agency_Name",
"agency_office" => "Name",
"username" => "Username",
"email_address" => "Email_Address",
"password" => "Password",
)
)
);
interface iValidation{
public function __construct($data);
public function validate();
const map = VALIDATION_MAP;
}
而且我有子類其中之一是像這樣:
class Validate_Name extends Validator implements iValidation{
private $_data;
public function __construct($data){
$this->_data = $data;
}
public function validate(){
$data = $this->_data;
$length = strlen($data);
if ($length > 40){
$this->_errors[] = "Cannot be more than 40 characters";
}
if ($length < 3){
$this->_errors[] = "Cannot be less than 3 characters";
}
if (!preg_match("/^[a-zA-Z]+$/", $data)){
$this->_errors[] = "A-Z characters only";
}
}
}
而整個框架用於像這樣:......讓這一切之後的背景資料
$validator = new Validator($admin_test_data);
$validator->validate(); //^defined earlier ^^^
$errors = $validator->getErrors();
現在得到的問題。
我可能做了一些愚蠢至極,但我不能算出它和谷歌沒有做啓發我的一個很好的工作(或我不這樣做,要求谷歌方面做得很好)
子類參考$this->_errors[] = "This is the error";
,並在子類中使用die(var_dump($this->_errors));
時,該類的錯誤顯示爲應該顯示。
但是,如果我在類的外部調用die(var_dump($validator->getErrors()));
,則該數組爲空。
Asif父母忘記了孩子們設置的所有價值觀?
怎麼回事?