Para que serve a indução de tipo no PHP?

Olá Amigos!

Hoje vou falar um pouco sobre a (pobre) indução de tipo que o PHP oferece a partir da verão 5! Então para que serve? Simples, na declaração do método (função) você pode específicar de qual tipo determinado é um dado parametro, com o exemplo fica mais fácil:

<?php

class ProdutosDAO
{
	public function insert(Produtos $o)
	{
		$stmt = $conn->prepare('INSERT INTO produtos (codigo, descricao, preco) VALUES (:codigo, :descricao, :preco)');

		$stmt->bindParam('codigo', $o->codigo, PDO::PARAM_INT);
		$stmt->bindParam('descricao', $o->descricao, PDO::PARAM_STR);
		$stmt->bindParam('preco', $o->preco, PDO::PARAM_STR);

		$stmt->execute();
	}
}

?>

Observação: realizei uma correção no código acima conforme orientação de meus colegas no Linkedin.

Observe que na linha 5, que está destacada, na declaração do método insert tempos que o tipo de $o deverá ser, neste caso, uma instância da classe Produtos, e se passarmos um objeto diferente o PHP irá nos reportar um erro.

Lembrando também que a partir da versão 5.1 o PHP introduziu o tipo array, ou seja, metódos podem receber em seus parametros obrigatóriamente um array, a declaração é idêntica a sintaxe acima, dessa maneira:

public function insert(array $o = NULL)
{
    // Aqui vai o código para processar o array $o, que pode ser qualquer tipo de array
}

Note que eu coloquei um “igual à NULL” na declaração do método isso siginifica que o método irá aceitar um array, ou um valor nulo, isso vale para a indução de objetos também, ou seja no nosso primeiro exemplo poderiamos ter feito que: Produtos $o = NULL na declaração do método.

Muito simples não? Eu creio que este artifício seja muiti útil principalemnte em sistemas ue ostentam padrões de projeto, onde você garante que um determinado método só irá receber uma dada instância de objeto, além de mlehorar a manutenibilidade do sistema no geral 😉

Referências:

Obrigado,

Tiago.

Tags:

Add a Comment

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *