Posts Tagged ‘tipagem’
Tipagem Forte em PHP
Monday, August 2nd, 2010
O que é Tipagem^
Tipagem é o modo em que o interpretador/compilador de uma linguagem diferencia os tipos de variáveis, como inteiro, string, etc. No PHP, a tipagem é “dinâmica” ou “fraca”, isto é, você pode executar o código abaixo, que ele irá retornar “20″:
-
<?php
-
$a = "10";
-
echo $a * 2;
-
?>
Neste artigo serão descritos três métodos para utilizar tipagem forte em PHP.
Vantagens e Desvantagens^
Não há um consenso na comunidade de programadores PHP se a tipagem fraca do PHP é boa ou não e isto é assunto de vários flames em fóruns. Porém, pode-se enumerar vantagens e desvantagens do uso, não entrando no mérito se uma é melhor do que a outra.
Vantagens de Tipagem Forte (C++, Ruby)
- Pode assegurar a regra de negócio pelo tipo da variável/atributo
- Evita erros na compilação/interpretação, ao contrário da execução
Vantagens de Tipagem Fraca (PHP, Python):
- Menos burocracia
- Mais flexibilidade
Técnicas para deixar o PHP tipado fortemente^
Tipagem Forte utilizando Type Hinting^
Desde o PHP 5 é possível forçar um tipo de parâmetro em métodos, como exemplificado abaixo:
-
public function teste(NomeDaClasse $var) {
-
echo $var->teste2();
No exemplo, se for passado uma variável de um tipo diferente de “NomeDaClasse”, o PHP produzirá um Fatal Error.
Isso é útil para definir regras de negócios orientada a objeto, porém não exclui as fraquezas do PHP, por não tratar tipos básicos como int e string além de ser somente útil em atributos, deixando as variáveis de fora.
Tipagem Forte utilizando SPL_Types^
É uma extensão PECL que permite trabalhar com tipos básicos fortemente tipados, como no exemplo abaixo:
-
<?php
-
$int = new SplInt(3);
-
$float = new SplFloat(3.151521);
-
$float += $int;
-
$float = '1';
-
?>
O código acima irá retornar uma exception UnexpectedValueException.
Tipagem Forte utilizando POPOTypeSafe^
Usando as classes POPOTypeSafe e POPO descritas no artigo typesafe objects in PHP, escrito por Jan Kneschke, é possível criar classes com atributos tipados. Veja o exemplo abaixo:
-
<?php
-
class Pessoa extends POPOTypeSafe {
-
/** @var int */
-
public $idade;
-
/** @var string */
-
public $nome
-
}
-
$e = new Pessoa();
-
$e->nome = “Ariel”;
-
$e->idade = “21″;
-
?>
No exemplo acima, a última linha irá gerar uma Exception. O tipo do atributo é descrito pelo comentário.
Referências^
- http://www.php.net/manual/en/language.types.php
- http://cstruter.com/blog/44
- http://www.loudthinking.com/arc/000074.html
- http://www.slideshare.net/sebastian_bergmann/typesafe-objects-in-php
- http://jan.kneschke.de/projects/typesafe-objects-in-php/
- http://en.wikipedia.org/wiki/Type_system
- http://en.wikipedia.org/wiki/Strongly_typed_programming_language