Olá!
Seguindo o padrão strategy, a verificação de estado não deveria estar em outra função? Deixando a função de saque responsável apenas pelo saque e fazer a chamada desta verificação por outro local?
Outra dúvida é: no padrão de programação orientada a objetos os atributos de um objeto precisam ser declarados anteriormente como variável? Ex: um $this->teste precisa ser declarado antes das funções como private/protected/public $teste?