i dont' get it, you set the $result to false, never give it a chance to be set to true, then you return the result. so this field NEVER has a chance to be valid.
<?
function IsValid() {
$result = false;
if(!$result)
$this->error = "error message";
return $result;
}?>
i don't understand also why you return !$err; ( with the '!' ) in the Validate function.
either way, your field.IsValid function is returning false to your Test.Validate function, which then returns false to your Test.Handle() function which echos "Errors" 😃 the knee bone is connected to the thy bone too
i suggest making simpler practice classes.