O PHP como é conhecido hoje, é na verdade o sucessor para um produto chamado PHP/FI. Criado em 1994 por Rasmus Lerdof, a primeira encarnação do PHP foi um simples conjunto de binários Common Gateway Interface (CGI) escrito em linguagem de programação C. Originalmente usado para acompanhamento de visitas para seu currículo online, ele nomeou o conjunto de scripts de “Personal Home Page Tools” mais frequentemente referenciado como “PHP Tools.” Ao longo do tempo, mais funcionalidades foram desejadas, e Rasmus reescreveu o PHP Tools, produzindo uma maior e rica implementação. Este novo modelo foi capaz de interações com Banco de Dados e mais, fornecendo uma estrutura no qual os usuários poderiam desenvolver simples e dinâmicas aplicações web, como um livros de visitas. Em Junho de 1995, Rasmus » liberou o código fonte do PHP Tools para o público, o que permitiu que desenvolvedores usassem da forma como desejassem. Isso permitiu – e encorajou – usuários a fornecerem correções para bugs no código, e em geral, aperfeiçoá-lo.
Em Setembro do mesmo ano, Rasmus expandiu o PHP e – por um breve período – mudou o nome PHP. Agora referindo-se a ferramenta como FI, abreviação para “Forms Interpreter”, a nova implementação incluiu algumas funcionalidades básicas do PHP como bem conhecemos hoje. Tinha variáveis no estilo Perl, interpretação automática de variáveis de formulários, e sintaxe HTML embutida. A sintaxe em si era muito similar com a do Perl, porém muito mais limitada, simples, e um pouco inconsistente. De fato, para embutir o código em um arquivo HTML, desenvolvedores tinham que usar comentários HTML. Embora este método não sido inteiramente bem-recebido, FI continuou a desfrutar um crescimento e aceitação como uma ferramente CGI — mas ainda não como uma linguagem. Contudo, isso começou a mudar no mês seguinte; em Outubro, 1995 Rasmus liberou um completa reescrita do código. Trazendo de volta o nome PHP, estava agora (brevemente) nomeado “Personal Home Page Contruction Kit” e foi o primeiro lançamento a vangloriar-se que era, na época, considerado um avançado script de interface. A linguagem foi desenvolvida para, deliberadamente, ser parecida com C, tornando-a fácil para ser adotada por desenvolvedores habituados com C, Perl e linguagens similares. Tendo sido até este momento exclusiva para sistemas UNIX e sistemas compatíveis com POSIX, o potencial para uma implementação em um Windows NT começava a ser explorada.
O código tem outra reforma completa, e em Abril de 1996, combinando os nomes dos últimos lançamentos, Rasmus introduziu o PHP/FI. Esta segunda geração da implementação começou a realmente evoluir o PHP de um conjunto de ferramentas para sua própria linguagem de programação. Ele incluía suporte embutido dos banco de dados DBM, mSQL, e Postgres95, cookies, funções de apoio definidas pelo usuário, e muito mais. Em Junho, PHP/FI ganhou o status de versão 2.0. Um interessante fato sobre isso, porém, é que existia apenas um única completa versão do PHP 2.0. Quando finalmente se tornou um status beta em Novembro, 1997, o mecanismo de análise suvbjacente já estava interiramente reescrito.
Apesar de ter tido um curto período de desenvolvimento, ele continuava defrutar uma crescente popularidade em um ainda jovem mundo web desenvolvimento, Em 1997 e 1998, PHP/FI teve o apoio de milhares de usuários ao redor do mundo. Uma pesquisa Netcraft de Maio de 1998, indicou que cerca de 60.000 domínios relataram ter cabeçalhos contendo “PHP”, indicando que o servidor de hospedagem de fato tinha o PHP instalado. Este número pode ser equiparado com aproximadamente 1% de todos os domínios da Internet da época. Apesar destes números impressionantes, o amadurecimento do PHP/FI foi condenado a limitações; enquanto haviam vários contribuintes menores, ainda era desenvolvido principalmente por uma única pessoa.
Exemplo #1 Exemplo de código PHP/FI
<!--include /text/header.html-->
<!--getenv HTTP_USER_AGENT-->
<!--ifsubstr $exec_result Mozilla-->
Hey, you are using Netscape!<p>
<!--endif-->
<!--sql database select * from table where user='$username'-->
<!--ifless $numentries 1-->
Sorry, that record does not exist<p>
<!--endif exit-->
Welcome <!--$user-->!<p>
You have <!--$index:0--> credits left in your account.<p>
<!--include /text/footer.html-->
PHP 3
PHP 3.0 foi a primeira versão que se assemelha com o PHP como existe hoje. PHP/FI se encontrava ainda ineficiente e não tinha recursos que precisava para prover uma aplicação eCommerce que estavam desenvolvendo para um projeto da Universidade, Andi Gutmans e Zeev Suraski de Tel Aviv, Israel, começaram outra completa reescrita do interpretador em 1997. Abordando Rasmus online, eles discutiram vários aspectos para a corrente implementação e redesenvolvimento do PHP. Em um esforço para melhorar a engine e iniciar a construção em cima da base de usuários existentes do PHP/FI, Andi, Rasmus, e Zeev decidiram colaborar no desenvolvimento de uma nova e independente linguagem de programação. Essa nova linguagem foi lançada com um novo nome, que removeu a impressão do limitado uso pessoal que o nome PHP/FI 2.0 tinha mantido. Foi renomeado simplesmente para ‘PHP’, com o significado se tornando um acrônimo recursivo – PHP: Hypertext Preprocessor.
Um dos maiores pontos fortes do PHP 3.0 foram os fortes recursos de extensibilidade. Além de fornecer a usuários finais uma interface robusta para múltiplos banco de dados, protocolos, e APIs, a facilidade de estender a sua própria linguagem atraiu dezenas de desenvolvedores que submeteram uma variedade de módulos. Indiscutivelmente esta foi a chave para o PHP 3.0 ter sido um tremendo sucesso. Outro recurso chave foi introduzido no PHP 3.0 incluindo o suporte a programação orientada a objeto e a uma mais poderosa e consistente sintaxe de linguagem.
Em junho de 1998, com muitos novos desenvolvedores ao redor do mundo unindo esforços, PHP 3.0 foi anunciado pelo novo time de desenvolvimento do PHP como o sucessor oficial para o PHP/FI 2.0. As melhorias no PHP/FI 2.0, cessaram em Novembro do ano anterior e agora foi oficialmente finalizado. Depois de nove meses de testes abertos ao público, quando o anúncio do lançamento oficial do PHP 3.0 chegou, prontamente foi instalado em 70.000 domínios em todo mundo, e já não era mais limitado ao sistemas operacionais compatíveis ao POSIX. Uma parcela relativamente pequena de domínios informaram que o PHP foi instalado em um host com servidores executando Windows 95, 98 e NT, Macintosh. E em seu pico, PHP 3.0 foi instalado em aproximadamente 10% dos servidores web da internet.
PHP 4
No inverno de 1998, logo após o PHP 3.0 ter sido oficialmente lançado, Andi Gutmans e Zeev Suraski começaram a trabalhar em uma reescrita do core do PHP. Os objetivos do projeto eram melhorar performance das aplicações complexas, e melhorar a modularização do código base do PHP. Tais aplicações só foram possíveis pelos novos recursos e suporte para uma ampla variedades de banco de dados de terceiros e APIs do PHP 3.0, mas o PHP 3.0 não foi projetado para trabalhar com aplicações complexas de forma eficiente.
O novo motor, chamado ‘Zend Engine’ (composto pelos primeiros nome, Zeev e Andi), alcançou os objetivos do projeto com sucesso, e foi introduzido em meados de 1999. O PHP 4.0 baseado neste motor, e uma variedade de novos recursos adicionais, foi oficialmente lançado em Maio de 2000, quase dois anos após seu antecessor. Além da altíssima melhoria da performance nesta versão, o PHP 4.0 incluiu outros recursos chaves, tais como suporte para maioria dos servidores web, sessões HTTP, saídas de buffering, mais maneiras seguras para manipular dados de entrada de usuários e diversas novas construções de linguagem.
PHP 5
O PHP 5 foi lançado em Julho de 2004 após um longo desenvolvimento e vários pré-lançamentos. Principalmente impulsionado pelo seu core o Zend Engine 2.0
com um novo modelo de objeto e dezenas de outros novos recursos.
O time de desenvolvimento PHP inclui dezenas de desenvolvedores, também dezenas de outros trabalhando em algo relacionado ao PHP e apoio a projetos como PEAR, PECL, documentação, infraestrutura de rede subjacente de bem mais de uma centena de servidores web em seis dos sete continentes do mundo. Embora seja apenas uma estimativa baseada sobre estatísticas de anos anteriores, é seguro presumir que o PHP está agora instalado em dezenas, ou mesmo talvez centenas, de milhões de domínios em todo mundo
HHVM – HACK
Entre a versão 5 e a versão 7 do PHP que temos hoje se passaram 11 anos.
Neste meio tempo muitas empresas adotaram o PHP como linguagem principal para desenvolvimento de seus sistemas, como por exemplo, o Facebook. A rede de Mark Zuckerberg, por sua vez, ao ver que se passaram anos sem uma evolução significativa e sem o lançamento de novas versões do PHP, começou a desenvolver a linguagem Hack baseada em PHP e executada em cima do HHVM (Hip-hop Virtual Machine).
Houve um PHP 6. Ou pelo menos uma tentativa dele. Porém, o resultado não foi satisfatório e a versão não foi publicada oficialmente, mas existiam informações sobre essa versão. Logo poderia haver confusão se esta nova versão se chamasse PHP 6. Então, para evitar esses problemas, a equipe do PHP resolveu chamar a nova versão de PHP 7.
Outro motivo é que tinha muito charlatão por aí vendendo livros, cursos e aulas sobre o PHP 6, que nem sequer existia oficialmente.
PHP 7
Houve um PHP 6. Ou pelo menos uma tentativa dele. Porém, o resultado não foi satisfatório e a versão não foi publicada oficialmente, mas existiam informações sobre essa versão. Logo poderia haver confusão se esta nova versão se chamasse PHP 6. Então, para evitar esses problemas, a equipe do PHP resolveu chamar a nova versão de PHP 7.
Outro motivo é que tinha muito charlatão por aí vendendo livros, cursos e aulas sobre o PHP 6, que nem sequer existia oficialmente. Se quiser saber mais sobre os diversos motivos dessa escolha, leia o RFC oficial sobre a discussão sobre o nome da versão do PHP.
PHP 8
Agora sim, a atual e mais nova versão do PHP (até então).
Lançado em Dezembro de 2020, ele chegou com novas funcionalidades e melhorias gerais na linguagem. Não entraremos em detalhes aqui, pois prolongaria demais a postagem e não falaríamos tudo, recomendamos fortemente que leiam a documentação, entretanto citaremos aqui alguns pontos importantíssimos para te ajudar a escalar a versão 8 utilizando os pontos certos.
Validação para métodos de traços abstratos
Os traços são definidos como “um mecanismo para reutilização de código em linguagens de herança única, como PHP”. Tipicamente, eles são usados para declarar métodos que podem ser usados em múltiplas classes.
Uma característica também pode conter métodos abstratos. Estes métodos simplesmente declaram a assinatura do método, mas a implementação do método deve ser feita dentro da classe usando o traço.
Matrizes “Arrays” começando com um índice negativo
No PHP, se uma matriz começa com um índice negativo (start_index < 0
), os seguintes índices começarão a partir de 0 (mais sobre isso na documentação do array_fill
). Veja o exemplo a seguir:
$a = array_fill(-5, 4, true);
var_dump($a);
PHP JIT (Compilador Just in Time)
AH esse era muito aguardado heim!!!
A proposta da RFC descreve o JIT da seguinte forma meus amigos:
“O PHP JIT é implementado como uma parte quase independente do OPcache. Ele pode ser habilitado/desabilitado em tempo de compilação e em tempo de execução do PHP. Quando habilitado, o código nativo dos arquivos PHP é armazenado em uma região adicional da memória compartilhada do OPcache e op_array→opcodes[]. manipulador(es) mantém apontadores para os pontos de entrada do código JIT-ed.”
Então, como chegamos ao JIT e qual é a diferença entre JIT vs OPcache?
Para entender melhor o que é o JIT para PHP, vamos dar uma rápida olhada em como o PHP executa desde o código fonte até o resultado final.
A execução do PHP é um processo em 4 etapas:
- Lexing/Tokenizing: Primeiro, o intérprete lê o código PHP e constrói um conjunto de fichas.
- Parsing: O intérprete verifica se o script corresponde às regras de sintaxe e usa fichas para construir uma árvore de sintaxe abstrata (AST), que é uma representação hierárquica da estrutura do código fonte.
- Compilação: O intérprete atravessa a árvore e traduz os nós AST em opcodes Zend de baixo nível, que são identificadores numéricos que determinam o tipo de instrução executada pela VM Zend.
- Interpretação: Os Opcodes são interpretados e executados na Zend VM.
Mesmo que os opcodes estejam na forma de representação intermediária de baixo nível, eles ainda têm que ser compilados em código de máquina. JIT “não introduz nenhuma forma adicional de IR (Representação Intermediária)”, mas utiliza DynASM (Dynamic Assembler for code generation engines) para gerar código nativo diretamente do byte-código PHP.
Em resumo, o JIT traduz as partes quentes do código intermediário em código de máquina. Ao contornar a compilação, ele seria capaz de trazer melhorias consideráveis na performance e uso de memória.