Added getHasFailed()
Added $throwExceptionOnFailure
Added missing abstract keyword