Por que funções e métodos em PHP não diferenciam maiúsculas de minúsculas?

107

Funções e métodos em PHP não diferenciam maiúsculas de minúsculas, conforme ilustrado no exemplo a seguir.

function ag()
{
    echo '2';
}

Ag();
class test {
    function clMe()
    {
        echo 'hi';
    }
}

$instance = new test;
$instance->clme();

Mas esse não é o caso das variáveis. Qual é o motivo?

user198729
fonte
161
PHP não precisa de nenhuma lógica fedorenta!
Max Shawabkeh
2
"Porque o homem da sopa diz isso." Sem justificativa, mas referências: php.net/manual/en/functions.user-defined.php (entre os exemplos 3 e 4), php.net/manual/en/language.variables.basics.php
outis 01 de
2
class Share{ share($str){ echo $str; } } $sh = new Share(); $sh->share("string");Você pode se surpreender ao ver duas chamadas para compartilhamento de função ($ str). o primeiro por causa do c'tor e a segunda chamada explícita pelos mesmos motivos !!
vivek.m
1
@outis, o que você quer dizer com "homem da sopa"?
Pacerier
1
@outis, você está se referindo à "Sopa Nazista" de Seinfeld. YouTube , Wikipedia
Kevin Traas,

Respostas:

98

Deixe-me citar Entrevista - Criador do PHP, Rasmus Lerdorf

A primeira versão do PHP era um conjunto simples de ferramentas que reuni para o meu site e para alguns projetos. Uma ferramenta fazia alguns registros de sucesso em um banco de dados mSQL, outra agia como um interpretador de dados de formulário. Acabei com cerca de 30 pequenos programas CGI diferentes escritos em C antes de me cansar disso e combinei todos eles em uma única biblioteca C. Em seguida, escrevi um analisador muito simples que selecionaria tags de arquivos HTML e os substituiria pela saída das funções correspondentes na biblioteca C.

O analisador simples cresceu lentamente para incluir tags condicionais e, em seguida, tags de loop, funções etc. Em nenhum momento pensei que estava escrevendo uma linguagem de script. Eu estava simplesmente adicionando um pouco de funcionalidade ao analisador de substituição de macro. Eu ainda estava escrevendo toda a minha lógica de negócios real em C.

Eu li em algum lugar que, uma vez que todas as funções introduzidas pareciam essencialmente marcas em um documento HTML e como as marcas HTML não diferenciavam maiúsculas de minúsculas, ele escolheu nomes de função em PHP para não diferenciar maiúsculas de minúsculas. Posteriormente, esse recurso permaneceu ativo no idioma.

Shailesh Kumar
fonte
66
Também me lembro de uma citação de Rasmus em uma conferência de PHP em Paris dizendo mais ou menos: "Definitivamente, não sou um bom programador, em termos de seguir regras ou padrões de codificação estritos, mas posso dizer que se você confiar na distinção entre maiúsculas e minúsculas reconhecer um nome de função de outro, você está com sérios problemas! "
Tom Desp
1
ainda não diferencia maiúsculas de minúsculas no futuro?
vee
4
Então é por isso que os programadores php usam sublinhado em vez de camelcase ao nomear suas funções.
paperstreet7
2
@ paperstreet7 Alguns sim. Os bons não. Pelo menos não mais.
Dan
13
@dan, muitos programadores "bons" usam sublinhados. Na verdade, o PSR-0 propositalmente não faz uma recomendação. Um bom programador escolhe sublinhados ou caixa de camelo e segue essa convenção. Fazer essa escolha para medir se alguém é um bom programador é muito bobo.
jdp de
34

Sim, os nomes das funções e métodos não diferenciam maiúsculas de minúsculas.

E sim, os nomes das variáveis ​​diferenciam maiúsculas de minúsculas.

Não tenho certeza se há uma razão para isso - exceto que é assim há muito tempo e, portanto, continua sendo o caso, por motivos de compatibilidade com versões anteriores.



Como referência, alguns links / citações para várias páginas do manual:

Para funções ( citando ) :

Nota: os nomes das funções não fazem distinção entre maiúsculas e minúsculas, embora normalmente seja uma boa forma chamar as funções conforme aparecem em suas declarações.

E os métodos não são muito mais do que funções em objetos - especialmente quando pensamos em PHP 4 e compatibilidade com versões anteriores.


E, para variáveis ​​( citando ):

Variáveis ​​em PHP são representadas por um cifrão seguido pelo nome da variável. O nome da variável diferencia maiúsculas de minúsculas.

E propriedades de objeto não são muito mais do que variáveis ​​em objetos - mesma observação sobre PHP 4 e compatibilidade com versões anteriores.

Pascal MARTIN
fonte