PHP

O PHP e o seu ecossistema nunca estiveram tão fortes

O PHP nunca esteve tão forte. Nesse artigo, algumas desconstruções de famosas falácias acerca do PHP e alguns pontos que o fazem ser uma completa plataforma para a Web.

há 6 anos 11 meses

Formação Desenvolvedor PHP
Conheça a formação em detalhes

Uma das coisas mais destrutivas é o conceito pré-estabelecido sem uma análise razoável de conhecimento de causa. A tecnologia é mutável, ela não é perfeita, ela sempre terá algum ponto de fraqueza e continuamente evoluirá.

Algumas das falácias e más impressões sobre o PHP

Abaixo algumas das falácias e más impressões que são facilmente encontradas na web e em roda de colegas/amigos desenvolvedores e darei a minha opinião sobre cada uma delas.

“O PHP só serve para sites pessoais.”

O PHP, desde sua gênese, nasceu para Web e desde então, nunca a mudou. Ele se reinventou algumas vezes durante as décadas (sim, é uma linguagem nascida nos anos 90) e se estabeleceu com uma completa “plataforma web”. É utilizado pelas principais empresas de tecnologia do mercado e em grandes projetos. Algumas das grandes empresas que usam o PHP: Facebook, Google, Baidu, Wikipedia, Spotify, Uber etc.

Sim, o PHP foi criado despretensiosamente com o nome de “Personal Home Page Tools”. Rasmus Lerdorf, o seu criador, o desenvolveu para cuidar da sua página pessoal. A plataforma foi ficando interessante, recebendo incrementos, até que, depois de algumas versões, Zeev e Andi Gutmans (co-fundadores da Zend Technologies) reescreveram todo o core e lançaram a versão PHP 4. Nessa época que começou uma grande adoção da linguagem. Nos anos seguintes o PHP teve uma completa (nos seus termos e características) adição do paradigma de orientação a objetos, entre outras melhorias estruturais, até chegarmos no ponto em que estamos hoje, na versão PHP 7 e não muito distantes da versão 8.

Leitura recomendada: PHP 7 e novidades do PHP 7.1.

Veja esse relato, o Uber arrecadou as suas primeiras “moedas” utilizando PHP e a versão de um Framework que hoje é legada (a versão):

E vale lembrar que a escalabilidade de uma aplicação vai muito além da linguagem que ela utiliza.

“PHP é inseguro.”

Nenhuma linguagem é estritamente segura. A segurança da informação não se restringe a apenas algumas linhas de código. Ela envolve redes e seus protocolos, sistema operacional, serviços externos que são utilizados e, claro, a parte que nos “toca” (como desenvolvedores), que é a “programação segura” e, na maioria dos casos, a insegurança de uma codificação se dá pela limitação de conhecimento técnico do desenvolvedor e não necessariamente por causa da tecnologia que ele está utilizando.

Alguns dos macro tópicos que deveriam ser de domínio de todo desenvolvedor web (não importando a linguagem utilizada):

  • Conhecer o básico do protocolo HTTP;
  • Validar e sanitizar inputs (nunca confiar no que receber do cliente), isso já previne futuros ataques XSS e também escapar os dados ao imprimir na tela para o cliente;
  • Sempre utilizar queries parametrizadas nas operações com o banco de dados. Isso elimina a possibilidade de SQL Injection;
  • Utilizar um moderno algoritmo de hashing para passwords (como o bcrypt ou, melhor ainda, Argon2 que tem ganhado adeptos na comunidade de segurança);
  • Utilizar https em todos os domínios;
  • Criar cookies seguros, que só funcionem via HTTPS e que não sejam acessados por JavaScript;

Certamente há outros importantes tópicos, inclusive alguns mais relacionados a devOps. É importante buscar por esse tipo de conhecimento. Como desenvolvedores web não precisamos criar soluções para segurança, devemos apenas entender e utilizar as existentes. Não cabe a nós criarmos, por exemplo, uma library para criptografia, não é da nossa alçada, tem gente muito mais preparada para isso. Agora, é muito importante que conheçamos as opções disponíveis e como elas podem nos ajudar em nossos projetos.

Pelo fato de o PHP ser o motor de alguns dos maiores CMS’s do mercado como: Wordpress, Drupal, Joomla, Magento etc, é comum ler e notar vulnerabilidades que são encontradas nessas plataformas. E isso não é problema, desde que você se preocupe em sempre a utilizar as últimas versões e desde que elas se mantenham atualizadas (que é o caso). Algumas vulnerabilidades não são especificamente do PHP e sim de algum módulo externo como OpenSSL ou algo relacionado ao sistema operacional. Sim, o PHP, como qualquer outra plataforma, possui vulnerabilidades, sempre teve, sempre vai ter, por isso é sempre importante utilizar as últimas versões estáveis das tecnologias que você trabalha (e isso vale para tudo, desde a linguagem, uma simples library ou até mesmo o seu sistema operacional).

É razoavelmente comum sistemas legados rodando em versões antigas do PHP. Não dá pra cravar que tais sistemas precisam ser reescritos e migrados, tudo depende da criticidade das informações que eles trabalham e como é feita a auditoria de segurança neles.

Vale o destaque: A próxima minor version do PHP, a 7.2, fará dele a primeira linguagem a adicionar criptografia moderna (incluindo as últimas e mais avançadas curvas elípticas) na sua standard library, com a libsodium.

“PHP é uma linguagem defasada.”

Por muitos anos o PHP trabalhou com a ideia de “estabilidade” em detrimento à novas features, no entanto, a partir da versão 5.3 tivemos significativas alterações na linguagem, inclusão de novos recursos e estruturas.

É plausível não gostar do PHP, da sintaxe dele etc, cada qual com seus conhecimentos tácitos, preferências etc. Linguagens são como círculos sociais, elas possuem uma cultura, uma essência, algo que não se “quebra”, intangível. Ou seja, se eu adoro a forma com que Ruby faz alguma coisa, não devo achar que o PHP é defasado por conta disso, ou que ele deveria fazer da mesma forma. São culturas diferentes, formas de aplicar e pensar diferentes. E toda pluralidade é positiva.

“Mas o PHP não é uma linguagem orientada a objetos…”

Realmente, o PHP não é uma linguagem orientada a objetos, ele implementa o paradigma de orientação a objetos. O PHP é multiparadigma. Não existe demérito algum nisso. Não é o fato de uma linguagem ser (em essência) orientada a objetos que a faz ser a solução para todos os problemas. Por exemplo, atualmente é notório um movimento e uma grande adoção por linguagens funcionais.

A implementação de orientação a objetos no PHP é robusta e esse paradigma é o mais utilizado em todos os principais frameworks dele provindos.

Por que aprender PHP é um grande negócio?

Abaixo alguns motivos que eu considero relevantes mas que, claro, devem ser alinhados com os objetivos do seu projeto, a equipe que trabalhará nele etc.

1). É a linguagem mais utilizada para web, cerca de ~82% de todos os sites a utilizam:

Tabela das linguagens mais utilizadas para web

2). Ela foi desenvolvida para a Web (isso é um fator de vantagem e competitividade para se manter no topo entre mais utilizadas);

Isso pode ser observado no corpo do anúncio da primeira versão do PHP, postado em Junho de 1995 no repositório Usenet newsgroup:

From: rasmus@io.org (Rasmus Lerdorf) 
Subject: Announce: Personal Home Page Tools
Date: 1995/06/08
Message-ID: #1/1 
organization: none
newsgroups: comp.infosystems.www.authoring.cgi

Announcing the Personal Home Page Tools (PHP Tools) version 1.0.

These tools are a set of small tight cgi binaries written in C. They perform a number of functions including:

. Logging accesses to your pages in your own private log files
. Real-time viewing of log information
. Providing a nice interface to this log information.
. Displaying last access information right on your pages.
. Full daily and total access counters
. Banning access to users based on their domain
. Password protecting pages based on users' domains
. Tracking accesses ** based on users' e-mail addresses **
. Tracking referring URL' s - HTTP_REFERER support
. Performing server-side includes without needing server support for it
. Ability to not log accesses from certain domains (ie. your own)
. Easily create and display forms
. Ability to use form information in following documents

Here is what you don't need to use these tools:

. You do not need root access - install in your ~/public_html dir
. You do not need server-side includes enabled in your server
. You do not need access to Perl or Tcl or any other script interpreter . You do not need access to the httpd log files

The only requirement for these tools to work is that you have the ability to execute your own cgi programs. Ask your system administrator if you are not sure what this means.

The tools also allow you to implement a guestbook or any other form that needs to write information and display it to users later in about 2 minutes.

The tools are in the public domain distributed under the GNU Public License. Yes, that means they are free!

For a complete demonstration of these tools, point your browser at: http://www.io.org/~rasmus

- -
Rasmus Lerdorf
rasmus@io.org
http://www.io.org/-rasmus

3). O suporte à linguagem é constante. Todo ano teremos uma nova minor version até a chegada de alguma nova major version.

Pode ser que demore um pouco menos ou um pouco mais de um ano, tudo vai depender da estabilidade das alterações. Mas essa é a ideia principal. E para cada nova minor version, têm-se dois anos de suporte (bugs e segurança).

O panorama atual das versões do PHP e o suporte concedido a elas:

Versões do PHP e suporte

4). O PHP possui um maduro e completo ecossistema para gerenciamento de dependências (com Composer e Packagist).

Hoje, isso é requisito de análise para a escolha de uma linguagem. Um gerenciador de dependências é parte fundamental para o desenvolvimento e manutenção dos projetos.

O Composer (o gerenciador de dependências), nascido em 2011, mudou completamente a forma de se desenvolver com PHP. Eu separo a história do PHP em:

  • Pré-Composer
  • Pós-Composer

O Packagist é o repositório oficial do Composer. números dele do dia 13/04/2012 até 03/04/2017:

Pacotes registrados Versões disponíveis Pacotes instalados
134.508 804.269 4.264.652,569

5). O PHP é amplamente documentado na Web

Há documentação, artigos, dicas, discussões, fóruns, recursos etc. O PHP não nasceu “hoje”. Muitos problemas com suas soluções estão disponíveis na Web, muitos deles no Github.

6). O PHP possui excelentes e estabelecidos frameworks.

Alguns dos maiores expoentes do mercado e que estão andando junto com a evolução da linguagem:

  • Laravel 5
  • Symfony 3 (Em breve Symfony 4)
  • Zend Framework 3
  • Zend Expresive 2
  • CakePHP 3
  • Silex 2
  • Slim 3
  • CodeIgniter 3

Laravel - Blade Templates
Curso Laravel - Blade Templates
Conhecer o curso

Silex - Framework PHP
Curso Silex - Framework PHP
Conhecer o curso

O Symfony, Laravel e Zend Framework elevaram o nível do desenvolvimento com PHP. Há cases de aplicações com milhares de requisições por segundo e que utilizam algum desses frameworks.

Qual o real objetivo aqui?

O meu interesse não é afirmar que o PHP é a melhor linguagem, muito menos sugerir que você pare tudo e comece a estudá-lo. Essa ideia de “melhor linguagem” cai muito no terreno da “relatividade”. A melhor é que resolve o problema do seu projeto e que a sua equipe consegue trabalhar bem com ela.

Algo muito importante que devemos ter em mente é:

Uma linguagem de programação deve ser tratada como o “meio” para resolver um problema, não o “fim”.

Isso quer dizer que, não importa que linguagem você venha a escolher, desde que ela consiga entregar o valor final do seu produto. A escolha de uma linguagem / plataforma, principalmente em um ambiente corporativo, em um grande projeto, se passa por muitas decisões que vão além da nossa opinião e gosto pessoal.

A ideia aqui foi expor alguns pontos sobre PHP, que por muitas vezes é motivo de brincadeiras (o que é engraçado, eu me divirto às vezes haha) e até mesmo de julgamentos injustos.

Ah, claro, apesar disso tudo, sim, sou um “discípulo” da linguagem e eu fico muito contente quando as pessoas dão uma oportunidade de conhecê-la com mais intimidade.

Quer aprender PHP do “zero”? As nossas formações podem te ajudar com isso:

Um abraço e até a próxima!

Autor(a) do artigo

Kennedy Tedesco
Kennedy Tedesco

Head de desenvolvimento. Vasta experiência em desenvolvimento Web com foco em PHP. Graduado em Sistemas de Informação. Pós-graduando em Arquitetura de Software Distribuído pela PUC Minas. Zend Certified Engineer (ZCE) e Coffee Addicted Person (CAP). @KennedyTedesco

Todos os artigos

Artigos relacionados Ver todos