Eu li um artigo muito interessante recentemente chamado PHP: a fractal of bad design. Ele tem recebido muito tráfego entre sua comunidade PHP, porque é bastante incitante. Para ser honesto, ele tem um monte de pontos muito bons. Mas também comete um monte de erros e deixa passar uma coisa muito importante.
Alguns erros
O artigo comete alguns erros bem estranhos e faz algumas comparações estranhas. Permitam-me recordar os principais que eu vi…
- Nenhum depurador – O PHP tem o xdebug, que funciona muito bem como um depurador interativo.
- Falta de threading – Isso é verdade, mas ele lista isso como uma dificuldade e eu listo como algo positivo, uma vez que o ciclo de vida do aplicativo é dado por pedido (eu vou falar mais sobre isso em breve).
- == é inútil – Na verdade, é bastante útil, se usado adequadamente. Eu admito que o uso menos à medida que o tempo passa, mas, quando você precisar dele, ele é bastante útil…
- Problemas de scoping com Globals – Ele enumera isso como uma esquisitice. Honestamente, é uma das coisas que eu acho que PHP tem de boa em relação a quase todas as outras linguagens. Sem ver uma declaração global $ var em um bloco, você sabe que a variável é local. Então, olhando para uma declaração de função, você pode saber imediatamente qual estado externo é necessário sem ter que examinar ou rastrear cada variável (ou fazer com que o IDE faça isso por você).
- Constantes são definidas por uma chamada de função – Isso é verdade, mas ignora completamente a sintaxe `const FOO = “bar”;`, que também é perfeitamente válida e não é uma chamada de função.
- Variáveis estáticas dentro de métodos de instância são Global – Isso é verdade, porque é exatamente o que é uma variável estática deve ser. É como usar uma variável em Python utilizando `obj.__class__.varname`…
- O PHP é atrelado ao Apache naturalmente – Isso é flagrantemente falso, uma vez que existem muitos aplicativos que não executam o Apache. O fato é que o Apache vem pré-configurado na maioria das plataformas com mod_php. Mas a instalação de FastCGI com Nginx é realmente mais fácil do que a do IMHO mod_php com o Apache…
- Não há nenhuma maneira fácil para isolar um aplicativo PHP – Isso não é verdade, pois, com suphp e FastCGI, é realmente fácil ter múltiplas instâncias do PHP rodando em versões diferentes. Claro, com o mod_php, você precisa ter uma instância separada do Apache, mas há melhores SAPIs do que mod_php, por isso não é realmente justo descontar no PHP uma limitação no Apache…
- Toda a seção de missing features – Aqui é onde eu me perdi. Até aqui, ele tem falado sobre questões de linguagem (com a maioria das quais eu concordo). Mas, neste ponto, ele começa a falar sobre bibliotecas e frameworks. Claro, o PHP não tem um sistema template. Mas nem o Python ou Ruby. Django e Ruby On Rails têm, assim como Zend e Symfony. O PHP não possui um filtro XSS, mas Python e Ruby também não (os frameworks possuem). O PHP não tem routing, mas Python e Ruby também não. Ele tem um servidor dev. E ele tem a depuração interativa (xdebug). A seção de segurança é praticamente mais do mesmo…
Agora, mesmo o artigo sendo tão grande, essa é uma lista de reclamações muito pequena. Eu acho que há uma grande quantidade de bons conteúdos lá, e vale a pena ler, uma vez que você superar o tom de discurso extravagante.
Minha posição
Na verdade, eu concordo com a maior parte do que ele disse em seu artigo. O PHP é inconsistente. É detalhado. Ele possui um monte de comportamento estranho e um monte de problemas. Ele pode ser feio e ser muito estranho de trabalhar. Ele pode deixar muito a desejar.
Mas também é incrivelmente poderoso. É muito fácil escrever aplicativos de trabalho. É muito fácil criar um projeto de larga escala. É realmente fácil de estender. É fácil de obter ajuda (na realidade, é uma das maiores e mais ativas comunidades de programação na Internet).
No entanto, há uma coisa que ele pode fazer que quase nenhuma outra linguagem popular pode: ser útil para não-desenvolvedores. Tudo que você precisa fazer é olhar para o aplicativo web de código aberto para ver que o PHP realmente ganha. Quero dizer que, apenas no mercado de CMS, o PHP domina com uma longa distância dos outros (WordPress, Joomla, Drupal, vBulletin, MODx, erro de digitação etc.). Escolha um mercado web, e o PHP provavelmente vai dominá-lo (se já não tem uma forte presença). O fato é simplesmente que o PHP é ridicularmente fácil de fazer deploy. Tão fácil que até mesmo um não-desenvolvedor pode fazê-lo.
Como Brandon Savage salienta: It´s about the costumer. E essa é a grande peça que faltava no artigo original. Claro, a partir do ponto de vista de um desenvolvedor PHP, há muita coisa faltando em várias áreas. Mas desde quando os desenvolvedores determinam o que é bem sucedido? Se fosse assim, softwares como WordPress, jQuery e Jenkins/Hudson nunca teriam feito tanto sucesso (uma vez que suas bases de código têm sido, tradicionalmente, de qualidade questionável). Mas eles fizeram, porque resolveram um problema, e resolveram bem.
O ponto da questão é que o PHP tem uma série de vantagens sobre a maioria das outras linguagens. Aqui está uma lista simples que fiz:
- O HTTP é um cidadão de primeira classe. Nenhuma outra linguagem popular oferece isso. Nem Python, nem Ruby, nem C e nem JavaScript. O PHP tem interação direta com o HTTP.Você pode argumentar que é abaixo do ideal, mas é de primeira classe. Você não precisa de uma biblioteca ou de um framework para falar com HTTP.
- O SAPI é um cidadão de primeira classe (Server API, mod_php vs CGI vs FastCGI etc.). Isso significa que o PHP foi desenhado a partir do zero para ter um servidor em frente dele. Isso significa que a transição do código CLI para uma API do servidor é trivial (é só alterar a forma como ela recebe as variáveis de solicitação). Não há necessidade de uma biblioteca ou de um framework para interagir com um servidor. WSGI em Python te leva por parte do caminho, mas você ainda precisa importar uma biblioteca para se comunicar com o servidor. Isso torna o PHP simplesmente mais fácil para decolar aplicativos da web.
- Ciclo de vida do aplicativo é por solicitação. Este é realmente um dos aspectos negativos identificados pelo artigo original. Cada solicitação inicia o PHP novamente (bem, não o PHP, mas seu aplicativo PHP). Isso é uma coisa boa, porque (citando Rasmus Lerdorf, criador do PHP, em uma entrevista) “a arquitetura nada comum do PHP… leva à escalabilidade horizontal infinita na própria linguagem.” Isso significa que a transição de um único servidor para múltiplos depois que é feito o deploy no aplicativo é trivial. As únicas restrições são aquelas que o programador coloca artificialmente. Linguagens que usam o estado compartilhado nativamente (como Python, Ruby, JavaScript – NodeJS etc. – e Java) devem ser escritas para não usarem o estado compartilhado que é disponibilizado para que isso funcione.
- Base de usuários absolutamente gigantesca. Claro, outras linguagens possuem muitos seguidores, mas poucas são tão grandes como o PHP. E eu, pessoalmente, acho que essa é uma das melhores partes disso. Existe um muito conhecimento lá fora sobre como escalar PHP, e como resolver quase qualquer problema. Se souber o que está fazendo, encontrar as respostas é realmente muito fácil.
Essas quatro razões são suficientes para manter o PHP como minha linguagem principal. Eu sei e uso ativamente Python e server-side JS (Node.js especificamente), bem como uma série de outras línguagens. Mas eu fico com PHP para meus projetos principais, porque, mesmo não sendo perfeito, ele funciona…
?
Texto original disponível em http://blog.ircmaxell.com/2012/04/php-sucks-but-i-like-it.html