Anos atrás, eu aprendi a Applesoft Basic. As strings sempre tinham o sufixo $
e as matrizes tinham o sufixo %
. É assim que a linguagem funcionou. Você olhou para algo, sabia o que era. Eu nunca mergulhei muito no intérprete para entender por que esse era o caso ou as decisões de design que o fizeram.
O sigil no php vem de sua influência perl (que foi influenciada por awk
e sh
). O sigil no perl é um pouco mais do $
que pode identificar muitos tipos diferentes:
$
escalar
@
Lista
%
cerquilha
&
codeblock
*
typeglob
O sigilo identifica qual parte da estrutura da tabela de símbolos você está vendo. Nos bastidores, a entrada da tabela de símbolos para foo (acessada via *foo
- o typeglob) tem tudo o que pode ser um foo. Há $foo
, @foo
, %foo
, o formato foo
, &foo
o foo filehandle, etc ...
Isso também permite criar um alias de uma variável para outra:
#!/usr/bin/perl
$foo = "foo";
@qux = (1,2);
*bar = \$foo;
*bar = \@qux;
print "$bar @bar\n";
Isto imprime foo 1 2
- em perl, isso é o que os sigilos são realmente para, não que você deve fazer isso, mas sim que há esta por trás da cenas coisa que eles fazem.
Os sigilos não existem tanto para facilitar a leitura, mas para que se possa ter $foo
e @foo
sem ter uma colisão no espaço para nome (compare outros idiomas onde não se pode ter os dois int foo; int[] foo;
)
Sigilos para facilitar a leitura são algo que é aprendido como parte de qualquer idioma - lendo a sintaxe. Hipóteses, você pode impor o próprio tipo (como notação húngara) para fazer parte do identificador.
Algo no lex ao longo das linhas de:
typeChar [is]
capLetter [A-Z]
letter [a-z]
digit [0-9]
%%
{typeChar}{capLetter}(letter}|{digit})* { prientif("iddentifier");}
%%
E então você poderia ter código como
iFoo = 42;
sFoo = "a string";
iBar = iFoo * 2;
Não estou dizendo que essa é uma boa ideia, mas alguém que está acostumado ao idioma poderá lê-lo nativamente e pensar que ele aprimora a legibilidade, enquanto alguém que não está familiarizado com o idioma pode pensar que apenas acrescenta um monte de barulho para o idioma.
No entanto, depois de trabalhar com um idioma definido dessa maneira, eu provavelmente poderia lê-lo sem problemas.
Algumas pessoas gostam deles, outras não. Existem grandes guerras sagradas em vários fóruns debatendo isso e realmente se resume ao quanto você as usou.
Pode-se projetar uma nova linguagem para não-programadores que usa sigils e quem nunca programou antes nunca reclamará um pouco sobre eles. Por outro lado, você não pode tê-los como parte do idioma e, em seguida, os programadores de ruby ou perl reclamam que estão perdendo algumas informações importantes.
Realmente não importa. O que importa é como os sigilos se encaixariam no idioma, se você os usar ou não. Você quer poder fazer "123 $foo 456"
ou precisa fazer "123 " + foo + " 456"
? É aqui que a decisão deve ser tomada.