Por que se preocupar com o carregamento automático no WordPress, parte 2
No post anterior, abordei alguns pontos sobre por que acho que include_once, require_once e outras declarações semelhantes resultam em práticas de desenvolvimento ruins (pelo menos quando se trata do trabalho que estamos fazendo com nossos projetos WordPress ).
Se você não leu, não tem problema. A essência do post é que essas declarações fazem:
- depuração mais difícil,
- código de rastreamento mais difícil de fazer.
Em última análise, são coisas que podemos evitar. Finalizei o post com o seguinte:
Isso ainda deixa a questão de por que o carregamento automático (ou qualquer inclusão de arquivos de terceiros) é necessário.
E embora eu adoraria cobrir todos os detalhes neste post, será necessário este e mais um post como importante para entender alguns tópicos fundamentais sobre linguagens, intérpretes e compiladores antes de ir muito longe.
Carregamento automático no WordPress: tipos de idiomas
Quando se trata de linguagens de programação, elas podem ser divididas em dois tipos distintos de linguagens:
- digitado estaticamente
- digitado dinamicamente
Eles são fáceis de detectar, também.
Idiomas Estaticamente Digitados
Uma linguagem com tipagem estática significa que quando você declara uma variável, como uma string, um inteiro ou um número de ponto flutuante, ela mantém esse tipo durante todo o seu tempo de vida.
Isso não significa que ele não possa ser alterado ou analisado em outro tipo, mas a ideia é que você declare seu tipo e é assim que ele é operado.
Geralmente é especificado como um determinado tipo quando é declarado, como string ou int, e é visto com mais frequência em linguagens compiladas.
Idiomas de tipagem dinâmica
As linguagens tipadas dinamicamente, por outro lado, possuem variáveis que são mais fluidas, por falta de um termo melhor, por natureza.
Ou seja, você pode inicialmente declará-lo como uma string e depois compará-lo com um inteiro e depois usá-lo como uma string novamente.
O interpretador ou compilador (dependendo da linguagem que você está usando) fará o melhor que puder para inferir o que você está tentando fazer com base no contexto do que você está fazendo em seu código, mas nem sempre está certo.
Isso pode levar a efeitos colaterais e bugs estranhos.
JavaScript é assim. Para ver um exemplo, abra o console do seu navegador e digite algo parecido com o que você vê na captura de tela a seguir (e preste atenção no resultado):
Observe que quando usamos um sinal de igual duplo padrão, o interpretador força a string para o tipo booleano, mesmo que a string verdadeira não seja verdadeira.
O segundo caso é preciso (e é por isso que o triplo-igual quase sempre deve ser usado).
Além disso, como algo pode funcionar em um idioma não é como pode funcionar em outro idioma.
A conclusão é que não espere que seus idiomas façam a mesma coisa só porque eles podem suportar digitação dinâmica.
O que isso tem a ver com o carregamento automático?
Ok, então falamos um pouco sobre primitivos e tudo isso está bem, mas não faz muito quando falamos sobre classes, objetos, instanciação, carregamento automático e assim por diante, não é?
O objetivo de trazer à tona os tópicos mencionados é mostrar o papel que interpretadores e compiladores desempenham ao trabalhar com código em linguagens dinâmicas.
E isso é importante porque PHP é uma linguagem dinâmica.
Neste ponto, eu originalmente começaria a olhar para o código PHP de amostra, namespaces, carregamento automático, instruções de inclusão e tudo isso, mas tento manter meus artigos em um certo comprimento e isso começou a se estender um pouco mais do que eu queria .
Então, a conclusão final deste post, se eu tivesse que resumir, é esta:
Linguagens tipadas dinamicamente, como PHP, não têm o luxo de linguagens compiladas onde tudo é compilado em um único binário. Temos que dizer ao programa, de alguma forma, onde existem as dependências dentro do contexto do programa maior.
E é isso que pretendo abordar no próximo post.