Indução de tipos com PHP – O básico

Existe todo um preconceito em relação ao PHP ser relaxado com seus tipos. A questão é que esses haters se apegaram tanto a essa questão que já foi resolvida há algum tempo e não consegue largar. É como dizem: se você começa a afirmar uma coisa com certa frequência, você acaba acreditando sem retorno por aquele conceito e não há nada que o fará mudar de ideia. Mas não posso julgá-los, ainda em PHP existem pessoas usando getters e setters, enquanto há algum tempo temos ferramentas de sobrecarga e você acaba com a arquitetura de encapsulamento de seus valores. Ooops, isso também acontece em outras linguagens. My bad. Enfim, esquecendo a questão filosófica envolvida nesse assunto, vamos explicar como induzir tipos a seus objetos!

Mas o que é indução de tipo e por que isso é importante!?

Bem, essa é uma pergunta interessante é que precisaremos percorrer um certo caminho até chegar a sua resposta, mas resumindo, indução de tipo é quando você tem que ter certeza que o valor que está passando por determinado ponto do código é proveniente de algum tipo de dado (string, array, boolean,…) ou algum tipo de objeto(MinhaClasse, Usuario, PessoaFisica, PessoaJuridica, …).

No PHP, por padrão você pode fazer esse teste com apenas alguns tipos de dados. Você pode testá-lo se é um array ou alguma instância. Vamos a prática:

Eu sei. Já usei esse exemplo anteriormente para explicar as novas implementações da versão reduzida de declaração de arrays, mas o exemplo é completamente reusável se levarmos em consideração que logo a versão 5.4 do php estará lançada(isso se você não está lendo este artigo muito tempo depois que o php5.4 fora lançado).

No código acima, temos a indução de tipo sendo feito na declaração do método. Aquele array logo depois do parantese de abertura de nossos parâmetros indica que a variável list, obrigatoriamente deve ser um array, caso contrário, você verá algum apito do php avisando que fez alguma coisa errada como essa abaixo:

Ilustrando o que nós já sabíamos, ele quer um array e você está dando uma string. Vamos agora para um exemplo com objetos, para ficar mais divertido.

O código acima funciona perfeitamente como esperado. Queremos contratar um novo funcionário e quem faz isso é somente a classe Pessoa. E só se pode fazer contratações de pessoas físicas. Ditamos essa regra colocando em nosso código, que somente deve ser passado como parâmetro de nosso método contratar objetos da classe PessoaFisica.

E se alguém achou que poderia contratar uma empresa e pudesse usar os mesmos métodos(entenda-se por meios), que uma pessoa física?

Bem, acho que você já deve ter entendido qual o ganho que tem quando se se usa esse tipo de artifício em seu código: Confiança. No fim é tudo sobre isso. Você ganha confiabilidade que seu código só será usado se for de um determinado tipo ou de uma determinada instância.

Ok. Entendi! Mas e os outros tipos!?

Até o momento que estava escrevendo esse artigo o php havia implementado essa característica para apenas os dois tipos comentados. Porém, existe uma forma muito bacana se usar a indução de tipo para mais alguns. São eles: Inteiros, Enums, Ponto Flutuante, Booleanos e strings.

Nesse momento nós quebramos aquele conceito dos haters, então vamos como calma. Vamos dividir esse artigo em dois para tomarmos um ar.