我有一个验证类,我想用它来检查我的应用程序中的所有值是否在允许的约束内.
我将一个对象传递给验证类中的静态函数,来自另一个类(在本例中为User)
function validate() {
$errors = Validation::validate($this);
}
Run Code Online (Sandbox Code Playgroud)
在验证类中,我创建一个新对象,然后继续处理传递的参数对象的属性(或者至少这是我想要做的).
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;
}
Run Code Online (Sandbox Code Playgroud)
我在函数中打印出的值纯粹是出于测试目的.我不明白的是为什么对象在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类,所以我理解为什么这些值不可用,只是为什么它们在循环之外可用但不在其中.
此外,对受保护/私有属性进行验证的最佳方法是什么?
任何建议/提示将不胜感激.
谢谢.
来自docs(http://us3.php.net/manual/en/language.oop5.visibility.php):
声明受保护的成员只能在类本身以及继承和父类中访问.
从http://us3.php.net/manual/en/function.print-r.php:
print_r(),var_dump()和var_export()也将显示PHP 5对象的受保护和私有属性.将不显示静态类成员.
仅仅因为print_r()可以打印某些东西,并不意味着你的代码可以访问它.将print_r(),var_dump()和var_export()视为"特殊"函数.