OO PHP propiedades protegidas no disponible en foreach loop?

Tengo una clase de validación que me gustaría usar para verificar que todos los valores en mi aplicación están dentro de las restricciones permitidas.

Estoy pasando un objeto a una función estática dentro de la clase de validación, de otra clase (en este caso, el usuario)

function validate() {
    $errors = Validation::validate($this);
}

En la clase de validación, creo un nuevo objeto y luego procedo a través de las propiedades del objeto de parámetro pasado (o al menos eso es lo que me gustaría hacer).

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;
        }

Estoy imprimiendo valores dentro de la función únicamente para fines de prueba. Lo que no entiendo es por qué el objeto se imprime bien fuera del bucle foreach, pero si intento acceder a los valores dentro del bucle, no se muestra nada.

Esto es lo que se muestra FUERA del bucle 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 ) 
) 

La clase de validación NO extiende la clase de Usuario, por lo que entiendo por qué los valores no estarían disponibles, simplemente no por qué están disponibles fuera del bucle sino dentro de él.

Además, ¿cuál sería la mejor manera de llevar a cabo la validación en propiedades protegidas / privadas?

Cualquier consejo / consejo sería muy apreciado.

Gracias.

Respuestas a la pregunta(6)

Su respuesta a la pregunta