Nope, still not working as an empty array[severitylevel] still exists in the _errors array after the removeError call. Here's the progression.
Original clean regErrors
regErrors:Error_Context Object
(
[_name:Error_Context:private] => register
[_errors:Error_Context:private] => Array
(
)
[_default_severity:Error_Context:private] => 0
[_severity_levels:Error_Context:private] => Array
(
[0] => 0
[1] => 1
)
[_language_files:Error_Context:private] => Array
(
)
)
After array type error input. There error is created under a [ 0 ] (severity) array.
regErrors:Error_Context Object
(
[_name:Error_Context:private] => register
[_errors:Error_Context:private] => Array
(
[0] => Array
(
[email_in_use] => Array
(
[0] => email_in_use
[1] => Array
(
[0] => noone@nowhere.nowhere
)
)
)
)
[_default_severity:Error_Context:private] => 0
[_severity_levels:Error_Context:private] => Array
(
[0] => 0
[1] => 1
)
[_language_files:Error_Context:private] => Array
(
)
)
After the error is "removed". The [ 0 ](severity) array is still there.
regErrors:Error_Context Object
(
[_name:Error_Context:private] => register
[_errors:Error_Context:private] => Array
(
[0] => Array
(
)
)
[_default_severity:Error_Context:private] => 0
[_severity_levels:Error_Context:private] => Array
(
[0] => 0
[1] => 1
)
[_language_files:Error_Context:private] => Array
(
)
)
Now the problem. hasErrors() seen here...
public function hasErrors($severity = null)
{
if ($severity !== null && in_array($severity, $this->_severity_levels))
return !empty($this->_errors[$severity]);
elseif ($severity === null)
return !empty($this->_errors);
else
return false;
}
is called by registerMember without a severity. So hasErrors just does a !empty($this->errors) which isn't empty anymore as the empty severity[ 0 ] array still exists. It seems hasErrors needs to be smarter and not consider the existence of empty severity arrays as errors, or removeError needs to clean up those arrays when empty. One or the other.