Note:for English readers hitting this post: written in Portuguese, about a non-existing feature (variable class type cast) of php5, bith 5 and 6, and one good-argument on how it would improve the language.
UPDATE: check this post for a “solution” to class cast in PHP.
No meu post anterior referi-me a uma característica do PHP que eu vejo como uma limitação, no sentido que limita - acima de tudo - a performance do meu trabalho no dia-a-dia.
O primeiro comentário chamou-me atenção para o facto de não ter apresentado argumentos para sustentar que a falta do type-cast é uma limitação da linguagem, apenas que limita produtividade do conjunto restrito de developers que usa auto-complete.
Acho que faltou você se ater mais a linguagem e menos a IDE, pois a IDE é apenas a ferramenta que você usa para desenvolver uma linguagem.
Exacto. Com toda a razão. De facto existem alguns argumentos a favor do type casting e de como dariam algum benefício à linguagem, mas não indiquei nenhum.
pedir perdão em vez de licença
A principal vantagem seria permitir fazer mais EAFP e menos LBYL (exemplo está em Python).
Em PHP, com recurso ao type-cast (código php99 imaginado), seria possível pedir perdão:
try
{
......
(class)$obj->call();
.......
}
catch ()
{
...handle ...
}
em vez de (código PHP5 actual) pedir licença:
try {
......
if ($var instanceof class)
{
$obj->call();
}
else throw new ...
.....
}
catch ()
{
...handle ...
}
Mas há argumentos contra claro: dirão o puristas que uma syntaxe assim vai contra o polimorfismo. Sim, se passarmos a desenhar com os casts in place, se a nossa cabeça perder a noção da abstracção antes do modelo cristalizar.
Mas a verdade é que em alguns não nem faz sentido falar em polimorfismo. Talvez estejamos apenas na presença de casos extremos de weak-type. Nisso o PHP é perito, mas não confundir as coisas!
No exemplo que dei a função devolve legumes, automóveis e gases. Eu só gostaria de poder validar/explicitar a família de objectos acrescentando dois parêntesis e um nome de classe, em vez de escrever mais linhas.
É um pouco como o type hinting das funções, introduzido nos argumentos das funções no PHP5. Aqueles que agora abusam da declaração como filosofia de vida estão a asfixiar o código. Certo. Mas isso não significa que usar type-hinting é sempre um anti-pattern!
Um array é um array (em PHP, calma pythonistas). Jamais uma boolean servirá para o efeito. E uma query não é um resultado. Assim, desde que tenho type-hinting nas funções..
Passei a fazer:
try {
// won't work
whatever(new MySmarty());
}
catch ()
{
...handle ...
}
// function
function whatever(Query $var) { .... }
em vez de:
try {
// won't work
whatever(new MySmarty());
}
catch ()
{
...handle ...
}
// function
function whatever($var)
{
if ($var instanceof Query)
{
...
}
else throw new ...
Como vêm, com type-hinting nas funções não veio nenhum mal ao mundo. Apenas mais poder.
Eu acharia útil um type-cast que fossem além das primitivas.
Mais produtivo.
E mais elegante?



Adoro o teu blog, mas estes posts…fico sem palavras.
Sabes eu sou mais …bolos??:D