我有一个验证类,我想用它来检查我的应用程序中的所有值是否在允许的限制范围内。PHP受保护的属性在foreach循环中不可用?
我传递一个目的是一个静态函数验证类内,从另一个类(在这种情况下用户)
function validate() {
$errors = Validation::validate($this);
}
在验证类,我创建一个新对象,然后通过属性进行的传递参数对象(或者至少这是我想要做的)。
function validate($object) {
$validation = new Validation();
print_r($object);
print_r('<br />');
foreach($object as $key => $val) {
print_r($val);
isset($val->maxlength) ? $validation->validateLengthNoMoreThan($val->value, $val->maxlength) : null;
isset($val->minlength) ? $validation->validateLengthAtLeast($val->value, $val->minlength) : null;
isset($val->required) && ($val->required == true) ? $validation->validateNotBlank($val->value) : null;
}
return $validation->errors;
}
我打印出纯粹出于测试目的的函数内的值。我不明白的是为什么该对象在foreach循环外打印出来,但如果我尝试访问循环内的值,则不显示任何内容。
这是在外面显示的foreach循环:
User Object ( [username:protected] => Property Object ([value] => aaa [maxlength] => 12 [minlength] => 3 [required] => 1) [firstname:protected] =Property Object ([value] => aaa [maxlength] => 12 [minlength] => 3 [required] => 1) [lastname:protected] =Property Object ([value] => aaa [maxlength] => 12 [minlength] => 3 [required] => 1) )
验证类不扩展用户类,所以我明白为什么值将不可用,只是没有他们为什么可用外循环但不在里面。
另外,对受保护/私有属性进行验证的最佳方法是什么?
任何意见/提示将不胜感激。
谢谢。
为什么在验证的validate()方法内声明新的Validation实例类?你可能会摆脱创建一个新的Validation()对象的行,并用self来替换对$ validation的调用(假设它们是静态方法)。如果没有,这听起来像你可能想看看Singleton模式。 – 2009-10-29 20:32:03
我最初使用自我(可能会再次),我只是想返回对象而不是数组。 – Dan 2009-10-29 20:45:23