我有一个验证类,我想用它来检查我的应用程序中的所有值是否在允许的约束范围内。
我正在将一个对象从另一个类(在本例中为用户)传递给验证类中的静态函数
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 ) )
验证类不扩展 User 类,所以我理解为什么这些值不可用,只是不知道为什么它们在循环外可用但在循环内不可用。
此外,对 protected /私有(private)属性进行验证的最佳方法是什么?
如有任何建议/提示,我们将不胜感激。
谢谢。
最佳答案
来自文档(http://us3.php.net/manual/en/language.oop5.visibility.php):
Members declared protected can be accessed only within the class itself and by inherited and parent classes.
来自http://us3.php.net/manual/en/function.print-r.php :
print_r(), var_dump() and var_export() will also show protected and private properties of objects with PHP 5. Static class members will not be shown.
仅仅因为 print_r() 可以打印一些东西,并不意味着它可以被您的代码访问。将 print_r()、var_dump() 和 var_export() 视为“特殊”函数。
关于php - OO PHP 保护的属性在 foreach 循环中不可用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1646270/