𝖂𝖎ƙ𝖎𝖊

PHP: mudanças entre as edições

imported>Renato de Carvalho Ferreira
m (Página marcada que carece de mais notas)
 
(38 revisões intermediárias por 13 usuários não estão sendo mostradas)
Linha 1: Linha 1:
{{Mais notas|data=agosto de 2022}}
{{Info/Linguagem de computador
{{Info/Linguagem de computador
  |nome            = PHP
  |nome            = PHP
  |logotipo        = [[Imagem:PHP-logo.svg|alt=Logo PHP|170px]]
  |logotipo        = [[Imagem:PHP-logo.svg|alt=Logo PHP|260px]]
  |paradigma        = [[Programação imperativa|procedural]], [[Reflexão (programação)|reflexão]], [[orientação a objetos]], [[Programação funcional|funcional]]
  |paradigma        =
  |ultima_versao    = 7.3.11
* [[Programação imperativa|procedural]]
  |ultima_data      = {{data de lançamento|2019|10|24}}<ref>{{citar web |título=PHP 7.3.11 Released |publicado=php.net |data=2019-10-24 |url=https://www.php.net/archive/2019.php#2019-10-24-2 |acessodata=2019-10-25 |língua=en }}</ref>
* [[Reflexão (programação)|reflexiva]]
  |versao_beta      = 7.4.0RC4
* [[orientação a objetos|orientada a objetos]]
  |beta_data        = {{data de lançamento|2019|10|18}}<ref>{{citar web |título=PHP 7.4.0RC4 Released |publicado=php.net |data=2019-10-18 |url=https://www.php.net/archive/2019.php#2019-10-18-1 |acessodata=2019-10-23 |língua=en }}</ref>
* [[Programação funcional|funcional]]
  |ultima_versao    = 8.1.5
  |ultima_data      = {{data de lançamento|2022|4|14}}<ref>{{citar web |título=PHP 8.1.5 Released |publicado=php.net |data=2022-4-14 |url=https://www.php.net/archive/2022.php#2022-04-14-2 |acessodata=2022-05-01 |língua=en}}</ref>
  |versao_beta      =
  |beta_data        =
  |ano              = [[1995]]
  |ano              = [[1995]]
  |criador          = [[Rasmus Lerdorf]]
  |criador          = [[Rasmus Lerdorf]]
  |mantenedor      = [[Zend]]
  |mantenedor      = [[Zend]]
  |tipagem          = dinâmica
  |tipagem          =
  |compiladores    = [[Linguagem interpretada]]
* dinâmica
* fraca
* gradual <small>(desde a versão 7.0)</small>
  |implementações  =
  |dialetos        =
  |dialetos        =
  |influenciada_por = [[C (linguagem de programação)|C]], [[C++]], [[Perl]], [[Java (linguagem de programação)|Java]], [[Tcl]]
  |influenciada_por =
* [[C (linguagem de programação)|C]]
* [[C++]]
* [[Hack (linguagem de programação)|Hack]]
* [[HTML]]
* [[Java (linguagem de programação)|Java]]
* [[Perl]]
* [[Rust (linguagem de programação)|Rust]]<ref>{{Citar web |url=https://wiki.php.net/rfc/match_expression_v2 |título=PHP RFC: Match expression v2 |nome=Ilija |sobrenome=Tovilo |website=wiki.php.net |data=22 de maio de 2020 |acessodata=29 de novembro de 2020}}</ref>
* [[Tcl]]
  |influenciou      =
  |influenciou      =
  |extensão        = .php, .phtml, .php3, .php4, .php5, .php7, .phps
  |extensão        =
  |website          = {{URL|https://www.php.net/|www.php.net}}
* .php
* .php3
* .php4
* .php5
* .php7
* .phps
* .phtml
  |website          = {{URL|https://www.php.net}}
}}
}}
'''PHP''' (um [[acrônimo recursivo|acrônimo]] recursivo para ''"'''P'''HP: '''H'''ypertext '''P'''reprocessor"'',  originalmente '''''P'''ersonal '''H'''ome '''P'''age'') é uma [[linguagem interpretada]] [[software livre|livre]], usada originalmente apenas para o desenvolvimento de aplicações presentes e atuantes no [[server-side|lado do servidor]], capazes de gerar conteúdo dinâmico na [[World Wide Web]].<ref>{{Citar web |url=http://www.php.net/manual/pt_BR/preface.php |título=Manual oficial do PHP - Prefácio  |publicado=php.net |acessodata=7 de fevereiro de 2011}}</ref> Figura entre as primeiras linguagens passíveis de inserção em documentos [[HTML]], dispensando em muitos casos o uso de arquivos externos para eventuais processamentos de dados. O [[código fonte|código]] é interpretado no lado do servidor pelo módulo PHP, que também gera a página web a ser visualizada no [[Client Side|lado do cliente]]. A linguagem evoluiu, passou a oferecer funcionalidades em linha de comando, e além disso, ganhou características adicionais, que possibilitaram usos adicionais do PHP, não relacionados a web sites. É possível instalar o PHP na maioria dos sistemas operacionais, gratuitamente. Concorrente direto da tecnologia [[ASP]] pertencente à Microsoft, o PHP é utilizado em aplicações como o [[MediaWiki]], [[Facebook]], [[Drupal]], [[Joomla]], [[WordPress]], [[Magento]] e o [[Oscommerce]].
'''PHP''' (um [[acrônimo recursivo|acrônimo]] recursivo para ''"'''P'''HP: '''H'''ypertext '''P'''reprocessor"'',  originalmente '''''P'''ersonal '''H'''ome '''P'''age'') é uma [[linguagem interpretada]] [[software livre|livre]], usada originalmente apenas para o desenvolvimento de aplicações presentes e atuantes no [[server-side|lado do servidor]], capazes de gerar conteúdo dinâmico na [[World Wide Web]].<ref>{{Citar web |url=http://www.php.net/manual/pt_BR/preface.php |título=Manual oficial do PHP - Prefácio  |publicado=php.net |acessodata=7 de fevereiro de 2011}}</ref> Figura entre as primeiras linguagens passíveis de inserção em documentos [[HTML]], dispensando em muitos casos o uso de arquivos externos para eventuais processamentos de dados. O [[Código-fonte|código]] é interpretado no lado do servidor pelo módulo PHP, que também gera a página web a ser visualizada no [[Lado cliente|lado do cliente]]. A linguagem evoluiu, passou a oferecer funcionalidades em linha de comando, e além disso, ganhou características adicionais, que possibilitaram usos adicionais do PHP, não relacionados a web sites. É possível instalar o PHP na maioria dos sistemas operacionais, gratuitamente. Concorrente direto da tecnologia [[ASP]] pertencente à Microsoft, o PHP é utilizado em aplicações como o [[MediaWiki]], [[Facebook]], [[Drupal]], [[Joomla|Joomla!]], [[WordPress]], [[Magento]] e o [[OsCommerce|Oscommerce]].


Criado por [[Rasmus Lerdorf]] em 1995, o PHP tem a produção de sua implementação principal, referência formal da linguagem, mantida por uma organização chamada The PHP Group. O PHP é software livre, licenciado sob a PHP License, uma licença incompatível com a GNU General Public License (GPL) devido a restrições no uso do termo PHP.
Criado por [[Rasmus Lerdorf]] em 1995, o PHP tem a produção de sua implementação principal, referência formal da linguagem, mantida por uma organização chamada The PHP Group. O PHP é software livre, licenciado sob a PHP License, uma licença incompatível com a GNU General Public License (GPL) devido a restrições no uso do termo PHP.


== História ==
== História ==
A linguagem foi criada em 1994 e o código fonte do PHP só foi liberado em [[1994|1995]], como um pacote de programas [[CGI]] criados por [[Rasmus Lerdorf]], com o nome ''Personal Home Page Tools'', para substituir um conjunto de scripts [[Perl]] que ele usava no desenvolvimento de sua página pessoal. Em [[1997]] foi lançado o novo pacote da linguagem com o nome de PHP/FI, trazendo a ferramenta ''Forms Interpreter'', um [[interpretador de comandos]] [[SQL]]. Mais tarde, [[Zeev Suraski]] desenvolveu o analisador do PHP 3 que contava com o primeiro recurso de orientação a objetos, que dava poder de alcançar alguns pacotes, tinha [[Herança (programação)|herança]] e dava aos desenvolvedores somente a possibilidade de implementar propriedades e métodos.<ref>[http://itc.conversationsnetwork.org/shows/detail3298.html PHP on Hormones de Rasmus Lerdorf]</ref><ref>[http://talks.php.net/show/mysql07key/3 slides for 'PHP on Hormones' talk por Lerdorf]</ref> Pouco depois, Zeev e [[Andi Gutmans]], escreveram o PHP 4, abandonando por completo o PHP 3, dando mais poder à máquina da linguagem e maior número de recursos de [[orientação a objetos]]. O problema sério que apresentou o PHP 4 foi a criação de cópias de objetos, pois a linguagem ainda não trabalhava com [[ponteiro (programação)|apontadores]] ou ''[[handler]]s'', como são as linguagens [[Java (linguagem de programação)|Java]], [[Ruby (linguagem de programação)|Ruby]] e outras. O problema fora resolvido na versão atual do PHP, a versão 5, que já trabalha com ''handlers''. Caso se copie um objeto, na verdade copiaremos um apontador, pois, caso haja alguma mudança na versão original do objeto, todas as outras também sofrem a alteração, o que não acontecia na PHP 4.<ref name="news">{{Citar web|acessodata=2010-03-27|url=http://news.php.net/php.internals/47120|título=PHP 6|publicado=The PHP project}}</ref>
A linguagem foi criada em [[1994]] e o código fonte do PHP só foi liberado em [[1995]], como um pacote de programas [[CGI]] criados por [[Rasmus Lerdorf]], com o nome ''Personal Home Page Tools'', para substituir um conjunto de scripts [[Perl]] que ele usava no desenvolvimento de sua página pessoal. Em [[1997]] foi lançado o novo pacote da linguagem com o nome de PHP/FI, trazendo a ferramenta ''Forms Interpreter'', um [[interpretador de comandos]] [[SQL]]. Mais tarde, [[Zeev Suraski]] desenvolveu o analisador do PHP 3 que contava com o primeiro recurso de orientação a objetos, que dava poder de alcançar alguns pacotes, tinha [[Herança (programação orientada a objetos)|herança]] e dava aos desenvolvedores somente a possibilidade de implementar propriedades e métodos.<ref>[http://itc.conversationsnetwork.org/shows/detail3298.html PHP on Hormones de Rasmus Lerdorf]</ref><ref>[http://talks.php.net/show/mysql07key/3 slides for 'PHP on Hormones' talk por Lerdorf]</ref> Pouco depois, Zeev e [[Andi Gutmans]], escreveram o PHP 4, abandonando por completo o PHP 3, dando mais poder à máquina da linguagem e maior número de recursos de [[orientação a objetos]]. O problema sério que apresentou o PHP 4 foi a criação de cópias de objetos, pois a linguagem ainda não trabalhava com [[ponteiro (programação)|apontadores]] ou ''[[Handle (informática)|handlers]]'', como são as linguagens [[Java (linguagem de programação)|Java]], [[Ruby (linguagem de programação)|Ruby]] e outras. O problema fora resolvido na versão 5 do PHP, que já trabalha com ''handlers''. Caso se copie um objeto, na verdade copiaremos um apontador, pois, caso haja alguma mudança na versão original do objeto, todas as outras também sofrem a alteração, o que não acontecia na PHP 4.<ref name="news">{{Citar web|acessodata=2010-03-27|url=http://news.php.net/php.internals/47120|título=PHP 6|publicado=The PHP project}}</ref>


Trata-se de uma linguagem extremamente [[programação modular|modularizada]], o que a torna ideal para instalação e uso em [[servidor web|servidores web]]. Diversos módulos são criados no repositório de extensões [[PECL]] (PHP Extension Community Library) e alguns destes módulos são introduzidos como padrão em novas versões da linguagem. É muito parecida, em [[tipo de dado|tipos de dados]], sintaxe e mesmo funções, com a linguagem [[linguagem de programação C|C]] e com a [[C++]]. Pode ser, dependendo da configuração do servidor, embarcada no código [[HTML]]. Existem versões do PHP disponíveis para os seguintes sistemas operacionais: [[Microsoft Windows|Windows]], [[Linux]], [[FreeBSD]], [[Mac OS]], [[OS/2]], [[AS/400]], [[Novell Netware]], [[RISC|RISC OS]], [[Advanced Interactive eXecutive|AIX]], [[IRIX]] e [[Solaris (sistema operacional)|Solaris]].
Trata-se de uma linguagem extremamente [[Modularidade|modularizada]], o que a torna ideal para instalação e uso em [[servidor web|servidores web]]. Diversos módulos são criados no repositório de extensões [[PECL]] (PHP Extension Community Library) e alguns destes módulos são introduzidos como padrão em novas versões da linguagem. É muito parecida, em [[tipo de dado|tipos de dados]], sintaxe e mesmo funções, com a linguagem [[linguagem de programação C|C]] e com a [[C++]]. Pode ser, dependendo da configuração do servidor, embarcada no código [[HTML]]. Existem versões do PHP disponíveis para os seguintes sistemas operacionais: [[Microsoft Windows|Windows]], [[Linux]], [[FreeBSD]], [[Mac OS Classic|Mac OS]], [[OS/2]], [[AS/400]], [[Novell Netware]], [[RISC|RISC OS]], [[Advanced Interactive eXecutive|AIX]], [[IRIX]] e [[Solaris (sistema operacional)|Solaris]].


Construir uma página dinâmica baseada em bases de dados é simples com PHP, (em parte, vale lembrar), este provê suporte a um grande número de [[Banco de dados|bases de dados]]: [[Oracle (banco de dados)|Oracle]], [[Sybase]], [[PostgreSQL]], [[InterBase]], [[MySQL]], [[SQLite]], [[Microsoft SQL Server|MSSQL]], [[Firebird (servidor de base de dados)|
Construir uma página dinâmica baseada em bases de dados é simples com PHP, (em parte, vale lembrar), este provê suporte a um grande número de [[Banco de dados|bases de dados]]: [[Oracle (banco de dados)|Oracle]], [[Sybase]], [[PostgreSQL]], [[InterBase]], [[MySQL]], [[SQLite]], [[Microsoft SQL Server|MSSQL]], [[Firebird (servidor de base de dados)|
Firebird]], etc., podendo abstrair o banco com a biblioteca [[ADOdb]], entre outras. A Wikipédia funciona sobre um software inteiramente escrito em PHP, usando bases de dados MySQL: o [[MediaWiki]].<ref name="news"/>
Firebird]], etc., podendo abstrair o banco com a biblioteca [[ADOdb]], entre outras. A Wikipédia funciona sobre um software inteiramente escrito em PHP, usando bases de dados MySQL: o [[MediaWiki]].<ref name="news"/>


PHP tem suporte aos protocolos: [[IMAP]], [[SNMP]], [[NNTP]], [[POP3]], [[HTTP]], [[LDAP]], [[XML-RPC]], [[SOAP]]. É possível abrir ''[[Soquete de rede|sockets]]'' e interagir com outros [[Protocolo (ciência da computação)|protocolos]]. E as [[biblioteca de rotinas|bibliotecas]] de terceiros expandem ainda mais estas funcionalidades. Existem iniciativas para utilizar o PHP como linguagem de programação de sistemas fixos. A mais notável é a [[PHP-GTK]]. Trata-se de um conjunto do PHP com a biblioteca [[GTK]], portada do [[C++]], fazendo assim softwares inter-operacionais entre [[Microsoft Windows|Windows]] e [[Linux]]. Na prática, essa extensão tem sido muito pouco utilizada para projetos reais.<ref name="news"/>
PHP tem suporte aos protocolos: [[Internet Message Access Protocol|IMAP]], [[Simple Network Management Protocol|SNMP]], [[Network News Transfer Protocol|NNTP]], [[Post Office Protocol|POP3]], [[Hypertext Transfer Protocol|HTTP]], [[LDAP]], [[XML-RPC]], [[SOAP]]. É possível abrir ''[[Soquete de rede|sockets]]'' e interagir com outros [[Protocolo (ciência da computação)|protocolos]]. E as [[biblioteca de rotinas|bibliotecas]] de terceiros expandem ainda mais estas funcionalidades. Existem iniciativas para utilizar o PHP como linguagem de programação de sistemas fixos. A mais notável é a [[PHP-GTK]]. Trata-se de um conjunto do PHP com a biblioteca [[GTK]], portada do [[C++]], fazendo assim softwares inter-operacionais entre [[Microsoft Windows|Windows]] e [[Linux]]. Na prática, essa extensão tem sido muito pouco utilizada para projetos reais.<ref name="news"/>


O [[Acrônimo recursivo|acrônimo]] recursivo PHP representa um elefante, que é conhecido como o mascote da linguagem.
O [[Acrônimo recursivo|acrônimo]] recursivo PHP representa um elefante, que é conhecido como o mascote da linguagem.
Linha 58: Linha 81:


=== Histórico de versões ===
=== Histórico de versões ===
<!-- HISTÓRICO DE LANÇAMENTOS -->
{| class="wikitable"
{| class="wikitable"
|-
|-
!
! Versão
! Legenda
! Data de lançamento original
|-
! Última versão
| style="background:salmon;" | Vermelho
! Suportada até<ref>{{citar web |título=Unsupported Branches |publicado=php.net |url=https://www.php.net/eol.php |acessodata=2022-02-02 |língua=en }}</ref><ref>{{citar web |título=Supported Versions |publicado=php.net |url=https://www.php.net/supported-versions.php |acessodata=2022-02-02 |língua=en }}</ref>
| Versão antiga
! Notas
| Nenhum desenvolvimento
|-
| style="background:#FCED77;" | Amarelo
| Versão estável
| Correções de segurança
|-
| style="background:#a0e75a;" | Verde
| Versão estável
| Correções de segurança e de bugs
|-
| style="background:skyBlue;" | Azul
| Versões futuras
| Novos recursos
|}
 
<!-- RELEASE HISTORY -->
{| class="wikitable"
|-
! Versão principal !! Versão intermediária !! Data de lançamento !! Notas
|-
!1
| style="background:salmon;" | 1.0.0
|{{nowrap|1995-06-08}}
|Oficialmente chamado de "Personal Home Page Tools (PHP Tools)" (Ferramentas para página pessoal). Este foi o primeiro uso para o nome "PHP".
|-
|-
!2
| {{Versão|o|1.0}}
| style="background:salmon;" | 2.0.0
| {{data|1995|6|8}}
|{{nowrap|1997-11-01}}
| {{dunno}}
|Considerado pelo seu criador como a "mais rápida e simples ferramenta" para criar páginas dinâmicas para a Web.
| {{dunno}}
| Oficialmente chamado de "Personal Home Page Tools (PHP Tools)" (Ferramentas para página pessoal). Este foi o primeiro uso para o nome "PHP".
|-
|-
!rowspan="2"|3
| {{Versão|o|2.0}}
| style="background:salmon;" | 3.0.0
| {{data|1997|11|1}}
|{{nowrap|1998-06-06}}
| {{dunno}}
|O desenvolvimento passou a ser feito por vários desenvolvedores em colaboração. Zeev Suraski e Andi Gutmans reescreveram toda a base do PHP nesta versão.
| {{dunno}}
| Considerado pelo seu criador como a "mais rápida e simples ferramenta" para criar páginas dinâmicas para a Web.
|-
|-
| style="background:salmon;" | 3.0.18
| {{Versão|o|3.0}}
|{{nowrap|2000-10-20}}
| {{data|1998|6|6}}
|Última versão para do PHP 3.0.x. [http://php.net/releases/index.php Unsupported Historical Releases]
| 3.0.18
| {{data|2000|10|20}}
| O desenvolvimento passou a ser feito por vários desenvolvedores em colaboração. Zeev Suraski e Andi Gutmans reescreveram toda a base do PHP nesta versão.
|-
|-
!rowspan="6"|4
| {{Versão|o|4.0}}
| style="background:salmon;" | 4.0.0
| {{data|2000|5|22}}
|{{nowrap|2000-05-22}}
| 4.0.6
|Foi adicionado um melhor sistema de [[análise sintática]] ([[parser]]) chamado de motor Zend (Zend engine).<ref name="php4changelog">{{Citar web|título=PHP: PHP 4 ChangeLog|url=http://www.php.net/ChangeLog-4.php|publicado=The PHP Group|acessodata=2008-02-22|data=2008-01-03}}</ref>
| {{data|2001|6|23}}
| Foi adicionado um melhor sistema de [[Sintaxe|análise sintática]] ([[parser]]) chamado de motor Zend (Zend engine).<ref name="php4changelog">{{Citar web|título=PHP: PHP 4 ChangeLog|url=http://www.php.net/ChangeLog-4.php|publicado=The PHP Group|acessodata=2008-02-22|data=2008-01-03}}</ref>
|-
|-
| style="background:salmon;" | 4.1.0
| {{Versão|o|4.1}}
|{{nowrap|2001-12-10}}
| {{data|2001|12|10}}
|Introduzidas as 'superglobais' (<code>$_GET</code>, <code>$_POST</code>, <code>$_SESSION</code>, etc.)<ref name="php4changelog" />
| 4.1.2
| {{data|2002|3|12}}
| Introduzidas as 'superglobais' (<code>$_GET</code>, <code>$_POST</code>, <code>$_SESSION</code>, etc.)<ref name="php4changelog" />
|-
|-
| style="background:salmon;" | 4.2.0
| {{Versão|o|4.2}}
|{{nowrap|2002-04-22}}
| {{data|2002|4|22}}
|A <code>register_globals</code> passou agora a estar desativada por padrão. Dados recebidos via rede são mais inseridos no escopo de [[variável global]], fechando possíveis brechas de segurança.<ref name="php4changelog" />
| 4.2.3
| {{data|2002|9|6}}
| A <code>register_globals</code> passou agora a estar desativada por padrão. Dados recebidos via rede são mais inseridos no escopo de [[variável global]], fechando possíveis brechas de segurança.<ref name="php4changelog" />
|-
|-
| style="background:salmon;" | 4.3.0
| {{Versão|o|4.3}}
|{{nowrap|2002-12-27}}
| {{data|2002|12|27}}
|Introduziu sua [[interface de linha de comando]] (command-line interface - CLI), para complementar o CGI.<ref name="php4changelog" /><ref name="phpclidocs">{{Citar web|título=PHP: Using PHP from the command line – Manual:|url=http://us3.php.net/manual/en/features.commandline.php|publicado=The PHP Group|acessodata=2009-09-11}}</ref>
| 4.3.11
| {{data|2005|3|31}}
| Introduziu sua [[Interface de linha de comandos|interface de linha de comando]] (command-line interface - CLI), para complementar o CGI.<ref name="php4changelog" /><ref name="phpclidocs">{{Citar web|título=PHP: Using PHP from the command line – Manual:|url=http://us3.php.net/manual/en/features.commandline.php|publicado=The PHP Group|acessodata=2009-09-11}}</ref>
|-
|-
| style="background:salmon;" | 4.4.0
| {{Versão|o|4.4}}
|{{nowrap|2005-07-11}}
| {{data|2005|7|11}}
|Adicionadas as páginas do manual para os script <code>phpize</code> e <code>php-config</code>.<ref name="php4changelog" />
| 4.4.9
| {{data|2008|8|7}}
| Adicionadas as páginas do manual para os scripts <code>phpize</code> e <code>php-config</code>.<ref name="php4changelog" />
|-
|-
| style="background:salmon;" | 4.4.9
| {{Versão|o|5.0}}
|{{nowrap|2008-08-07}}
| {{data|2004|7|13}}
|Melhorias na segurança e correção de bugs. Última versão do PHP 4.4.x.<ref>{{Citar web|url=http://www.php.net/downloads.php#v4 |título=Downloads |publicado=PHP |data= |acessodata=2009-07-29}}</ref><ref>{{Citar web|url=http://www.php.net/releases/4_4_9.php |título=4.4.9 Release Announcement |publicado=PHP |data= |acessodata=2009-07-29}}</ref>
| 5.0.5
| {{data|2005|9|5}}
| Zend Engine II com um novo modelo de objeto.<ref name="php5changelog">{{Citar web|título=PHP: PHP 5 ChangeLog|url=http://www.php.net/ChangeLog-5.php|publicado=The PHP Group|acessodata=2008-02-22|data=2007-11-08}}</ref>
|-
|-
! rowspan="33" |5
| {{Versão|o|5.1}}
| style="background:salmon;" | 5.0.0
| {{data|2005|11|24}}
|{{nowrap|2004-07-13}}
| 5.1.6
|Zend Engine II com um novo modelo de objeto.<ref name="php5changelog">{{Citar web|título=PHP: PHP 5 ChangeLog|url=http://www.php.net/ChangeLog-5.php|publicado=The PHP Group|acessodata=2008-02-22|data=2007-11-08}}</ref>
| {{data|2006|8|24}}
| Melhorias na performance com a introdução de variáveis de compilação na reengenharia do motor PHP.<ref name="php5changelog" /> Adicionada biblioteca ''PHP Data Objects'' (PDO) como uma nova interface de acesso aos [[bancos de dados]].<ref name="phpPdoDocs">{{Citar web|título=PHP manual: PDO|url=http://www.php.net/manual/en/intro.pdo.php|publicado=The PHP Group|acessodata=2011-11-15|data=2011-11-15}}</ref><ref>{{citar web |título=PHP 5.1.0 Release Announcement |publicado=php.net |data=2005-11-24 |url=https://www.php.net/releases/5_1_0.php |acessodata=2021-11-29 |língua=en }}</ref>
|-
|-
| style="background:salmon;" | 5.1.0
| {{Versão|o|5.2}}
|{{nowrap|2005-11-24}}
| {{data|2006|11|2}}
|Melhorias na performance com a introdução de variáveis de compilação na reengenharia do motor PHP.<ref name="php5changelog" /> Adicionada biblioteca ''PHP Data Objects'' (PDO) como uma nova interface de acesso aos [[bancos de dados]].<ref name="phpPdoDocs">{{Citar web|título=PHP manual: PDO|url=http://www.php.net/manual/en/intro.pdo.php|publicado=The PHP Group|acessodata=2011-11-15|data=2011-11-15}}</ref>
| 5.2.17
| {{data|2011|1|6}}
| Habilitado por padrão o filtro de extensões. Suporte ao [[JSON]] nativo.<ref name="php5changelog" /><ref>{{citar web |título=PHP 5.2.0 Release Announcement |publicado=php.net |data=2006-11-02 |url=https://www.php.net/releases/5_2_0.php |acessodata=2021-11-29 |língua=en }}</ref>
|-
|-
| style="background:salmon;" | 5.2.0
| {{Versão|o|5.3}}
|{{nowrap|2006-11-02}}
| {{data|2009|6|30}}
|Habilitado por padrão o filtro de extensões. Suporte [[JSON]] nativo.<ref name="php5changelog" />
| 5.3.29
| {{data|2014|8|14}}
| Suporte a [[espaço de nomes]] (''namespace''), [[Vinculação de nomes (computação)|vinculação de nomes]] (''late static bindings''), rótulos de salto de código ([[Goto (programação)|goto]] limitado), [[clausura (ciência da computação)|clausura]] nativa, arquivos PHP nativos (phar), [[Coletor de lixo (informática)|coletor de lixo]] para referências circulares, suporte ao [[Microsoft Windows|Windows]] melhorado, <code>sqlite3</code>, <code>mysqlnd</code> em substituição a <code>libmysql</code> como biblioteca de extensão de trabalho com [[MySQL]], <code>fileinfo</code> em substituição ao <code>mime_magic</code> para um melhor suporte ao [[MIME]], extensão de internacionalização, e descontinuidade da extensão <code>ereg</code>.<ref>{{citar web |título=PHP 5.3.0 Release Announcement |publicado=php.net |data=2009-06-30 |url=https://www.php.net/releases/5_3_0.php |acessodata=2021-11-29 |língua=en }}</ref>
|-
|-
| style="background:salmon;" | 5.2.16
| {{Versão|o|5.4}}
|{{nowrap|2010-12-16}}
| {{data|2012|3|1}}
| Última versão para a série 5.2.<ref>[http://www.php.net/archive/2010.php#id2010-12-16-1 PHP: News Archive - 2010]</ref>
| 5.4.45
| {{data|2015|9|3}}
| Suporte à trait, suporte a uma versão mais curta na sintaxe de vetores. Items removidos: <code>register_globals</code>, <code>safe_mode</code>, <code>allow_call_time_pass_reference</code>, <code>session_register()</code>, <code>session_unregister()</code> and <code>session_is_registered()</code>. Servidor web embutido.<ref>{{Citar web|url=http://php.net/manual/en/features.commandline.webserver.php |título=Built-in web server |acessodata=26 de março de 2012}}</ref>. Várias melhorias nas fucionalidades já existentes e na performance. Redução dos requerimentos de memória.<ref>{{citar web |título=PHP 5.4.0 Release Announcement |publicado=php.net |data=2012-03-01 |url=https://www.php.net/releases/5_4_0.php |acessodata=2021-11-29 |língua=en }}</ref>
|-
|-
| style="background:salmon;" | 5.2.17
| {{Versão|o|5.5}}
|{{nowrap|2011-01-06}}
| {{data|2013|6|20}}
| Correção de vulnerabilidade crítica relacionada a [[ponto flutuante]].
| 5.5.38
| {{data|2016|7|21}}
| Suporte para [[Gerador (ciência da computação)|geradores]], blocos <code>finally</code> para tratamento de exceções, OpCache (baseado em Zend Optimizer+) empacotado na distribuição oficial.<ref>{{citar web |título=PHP 5.5.0 Release Announcement |publicado=php.net |data=2013-06-20 |url=https://www.php.net/releases/5_5_0.php |acessodata=2021-11-29 |língua=en }}</ref>
|-
|-
| style="background:salmon;" | 5.3.0
| {{Versão|o|5.6}}
|{{nowrap|2009-06-30}}
| {{data|2014|8|28}}
|Suporte a [[nomes de espaço]] (''namespace''), [[Vinculação de nomes (computação)|Vinculação de nomes]] (''late static bindings''), rótulos de salto de código ([[goto]] limitado), [[clausura (ciência da computação)|clausura]] nativa, arquivos PHP nativos (phar), [[Coletor de lixo (informática)|coletor de lixo]] para referências circulares, suporte [[Microsoft Windows|Windows]] melhorado, <code>sqlite3</code>, <code>mysqlnd</code> em substituição a <code>libmysql</code> como biblioteca de extensão de trabalho com [[MySQL]], <code>fileinfo</code> em substituição ao <code>mime_magic</code> para um melhor suporte [[MIME]], extensão de internacionalização, e descontinuidade da extensão <code>ereg</code>.
| 5.6.40
| {{data|2018|12|31}}
| Expressões escalares constantes, funções variádicas, desempacotamento de argumento, novo operador de exponenciação, extensões da instrução <code>use</code> para funções e constantes, novo depurador <code>phpdbg</code> como um módulo SAPI e outras melhorias menores.<ref>{{citar web |título=PHP 5.6.0 Release Announcement |publicado=php.net |data=2014-08-28 |url=https://www.php.net/releases/5_6_0.php |acessodata=2021-11-29 |língua=en }}</ref>
|-
|-
| style="background:salmon;" | 5.3.1
| style="background:silver;"| 6.x
|{{nowrap|2009-11-19}}
| {{n/a|Não foi lançada}}
|Mais de 100 [http://www.php.net/ChangeLog-5.php#5.3.1 correções de problemas], dentre eles algumas falhas de segurança.
| {{n/a}}
| {{n/a}}
| Versão abandonada do PHP que planejava incluir suporte nativo ao Unicode.
|-
|-
| style="background:salmon;" | 5.3.2
| {{Versão|o|7.0}}
|{{nowrap|2010-03-04}}
| {{data|2015|12|3}}
| Grande número de correção de bugs.
| 7.0.33
| {{data|2019|1|10}}
| Zend Engine 3 (melhorias de desempenho e suporte a inteiros de 64 bits no Windows), sintaxe de variável uniforme, processo de compilação baseado em [[árvore sintática abstrata]], adicionado {{código|língua=php|código=Closure::call()}}, consistência de deslocamento bit a bit entre plataformas, operador {{código|língua=php|código=??}} (coalescência nula), sintaxe de escape de ponto de código [[Unicode]], declarações de tipo de retorno, declarações de tipo escalar (inteiro, flutuante, string e boolean), operador de comparação de três vias "nave espacial" <code>&lt;=&gt;</code>, delegação de [[Gerador (ciência da computação)|gerador]], [[Classe (programação)|classes anônimas]], API [[CSPRNG]] mais simples e disponível de maneira mais consistente, substituição de muitos "erros" internos restantes do PHP pelas [[Tratamento de exceção|exceções]] mais modernas e sintaxe abreviada para importar vários itens de um espaço de nomes.<ref>{{citar web |título=PHP 7.0.0 Release Announcement |publicado=php.net |data=2015-12-03 |url=https://www.php.net/releases/7_0_0.php |acessodata=2021-11-29 |língua=en }}</ref>
|-
|-
| style="background:salmon;" | 5.3.3
| {{Versão|o|7.1}}
|{{nowrap|2010-07-22}}
| {{data|2016|12|1}}
| Principalmente correções de bugs e segurança; [[PHP-FPM|FPM]] SAPI.
| 7.1.33
| {{data|2019|12|1}}
| Tipo de retorno void, modificadores de visibilidade de constante de classe.<ref>{{citar web |título=PHP 7.1.0 Release Announcement |publicado=php.net |data=2016-12-01 |url=https://www.php.net/releases/7_1_0.php |acessodata=2021-11-29 |língua=en }}</ref>
|-
|-
| style="background:salmon;" | 5.3.4
| {{Versão|o|7.2}}
|{{nowrap|2010-12-10}}
| {{data|2017|11|30}}
| Principalmente correções de bugs e segurança; [[PHP-FPM|FPM]] SAPI melhorado.
| 7.2.34
| {{data|2020|11|30}}
| Parâmetro de objeto e declaração de tipo de retorno, extensão Libsodium, substituição de método abstrato, ampliação de tipo de parâmetro.<ref>{{citar web |título=PHP 7.2.0 Release Announcement |publicado=php.net |data=2017-11-30 |url=https://www.php.net/releases/7_2_0.php |acessodata=2021-11-29 |língua=en }}</ref>
|-
|-
| style="background:salmon;" | 5.3.5
| {{Versão|o|7.3}}
|{{nowrap|2011-01-06}}
| {{data|2018|12|6}}
| Conserto de erro crítico relacionado a [[ponto flutuante]].
| 7.3.33
| {{data|2021|12|6}}
| Sintaxe flexível [[Here document|Heredoc]] e Nowdoc, suporte para atribuição de referência e desconstrução de array com list(), suporte à PCRE2, função hrtime().<ref>{{citar web |título=PHP 7.3.0 Release Announcement |publicado=php.net |data=2018-12-06 |url=https://www.php.net/releases/7_3_0.php |acessodata=2021-11-29 |língua=en }}</ref>
|-
|-
| style="background:salmon;" | 5.3.6
| {{Versão|co|7.4}}
|{{nowrap|2011-03-10}}
| {{data|2019|11|28}}
| Mais de 60 correções de [[bug]] reportados em versões anteriores.
| 7.4.28
| {{data|2022|11|28}}
| Propriedades tipadas 2.0, pré-carregamento, operador de atribuição de coalescência nula, openssl_random_pseudo_bytes melhorada, referências fracas, FFI - [[interface de função externa]], extensão hash sempre disponível, registro de hash de senha, divisão de string multibyte, reflexão para referências, remoção de ext/wddx, novo mecanismo de serialização de objeto personalizado.<ref>{{citar web |título=PHP 7.4.0 Release Announcement |publicado=php.net |data=2019-11-28 |url=https://www.php.net/releases/7_4_0.php |acessodata=2021-11-29 |língua=en }}</ref>
|-
|-
| style="background:salmon;" | 5.3.7
| {{Versão|co|8.0}}
|{{nowrap|2011-08-18}}
| {{data|2020|11|26}}
| Esta versão focou-se na melhoria da estabilidade da série PHP 5.3.x com mais de 90 correções de bug, algumas relacionadas também à segurança.
| 8.0.16
| {{data|2023|11|26}}
| [[JIT|Compilação Just-In-Time (JIT)]], arrays começando com um índice negativo, semântica de linguagem mais rígida/sã (validação para métodos de traços abstratos), comparações de string para números mais sãs, strings numéricas mais sãs, TypeError em operadores aritméticos/bit-a-bit inválidos, reclassificação de vários erros de mecanismo, erros de [[sistema de tipos|tipo]] consistentes para funções internas, erro fatal para assinaturas de método incompatíveis), conversão de float para string independente de localidade, ajustes de sintaxe variável, [[Atributo (computação)|atributos]], [[Parâmetro (ciência da computação)|argumentos]] nomeados, expressão de correspondência, promoção de propriedade do construtor, tipos em união, tipo misto, tipo de retorno ''static'', operador ''[[Null (programação)|nullsafe]]'', ''non-capturing catches'', expressão ''throw'', extensão JSON está sempre disponível.<ref>{{citar web |título=PHP 8.0.0 Release Announcement |publicado=php.net |data=2020-11-26 |url=https://www.php.net/releases/8.0/en.php |acessodata=2020-11-26 |língua=en }}</ref>
|-
|-
| style="background:salmon;" | 5.3.8
| {{Versão|c|8.1}}
|{{nowrap|2011-08-23}}
| {{data|2021|11|25}}
| Esta versão corrigiu dois problemas introduzidos na versão PHP 5.3.7.
| 8.1.5
| {{data|2024|11|25}}
| Notação literal de inteiro octal explícita, enumerações, propriedades somente leitura, sintaxe chamável de primeira classe, ''new'' em inicializadores, tipos de interseção puros, tipo de retorno ''never'', restrições de classe final, ''fibers''.<ref>{{citar web |título=PHP 8.1.0 Release Announcement |publicado=php.net |data=2021-11-25 |url=https://www.php.net/releases/8.1/en.php |acessodata=2021-11-29 |língua=en }}</ref>
|-
|-
| style="background:salmon;" | 5.3.9
| colspan="5" |{{Versão|l|mostrar=111100}}
|{{nowrap|2012-01-10}}
| Esta versão focou-se na melhoria da estabilidade da série PHP 5.3.x.
|-
| style="background:salmon;" | 5.3.10
|{{nowrap|2012-02-02}}
| Corrigida execução remota arbitrária reportada por Stefan Esser, CVE-2012-0830.
|-
| style="background:salmon;" | 5.3.13
|{{nowrap|2012-05-08}}
| Corrigida vulnerabilidade nas instalações utilizando CGI.
|-
| style="background:salmon;" | 5.3.14
|{{nowrap|2012-06-06}}
| [http://www.php.net/ChangeLog-5.php#5.3.14 bugs corrigidos].
|-
| style="background:salmon;" | 5.3.15
|{{nowrap|2012-07-19}}
| [http://www.php.net/ChangeLog-5.php#5.3.15 bugs corrigidos].
|-
| style="background:salmon;" | 5.3.16
|{{nowrap|2012-08-16}}
| [http://www.php.net/ChangeLog-5.php#5.3.16 bugs corrigidos].
|-
| style="background:salmon;" | 5.3.17
|{{nowrap|2012-09-13}}
| [http://www.php.net/ChangeLog-5.php#5.3.17 bugs corrigidos].
|-
| style="background:salmon;" | 5.3.21
|{{nowrap|2013-01-17}}
| [http://www.php.net/ChangeLog-5.php#5.3.21 bugs corrigidos].
|-
| style="background:salmon;" | 5.4.0
|{{nowrap|2012-03-01}}
| Suporte à [[trait (computer programming)|Trait]], suporte a uma versão mais curta na sintaxe de vetores. Items removidos: <code>register_globals</code>, <code>safe_mode</code>, <code>allow_call_time_pass_reference</code>, <code>session_register()</code>, <code>session_unregister()</code> and <code>session_is_registered()</code>. Servidor web embutido.<ref>{{Citar web|url=http://php.net/manual/en/features.commandline.webserver.php |título=Built-in web server |acessodata=26 de março de 2012}}</ref>. Várias melhorias nas fucionalidades já existentes e na performance. Redução dos requerimentos de memória.
|-
| style="background:salmon;" | 5.4.1
|{{nowrap|2012-04-26}}
| [http://www.php.net/ChangeLog-5.php#5.4.1 correções de bugs].
|-
| style="background:salmon;" | 5.4.2
|{{nowrap|2012-05-03}}
| Pacote de segurança para corrigir vulnerabilidade em chamadas PHP-CGI.
|-
| style="background:salmon;" | 5.4.3
|{{nowrap|2012-05-08}}
| Correção de vulnerabilidade relacionada às instalações baseadas em CGI e correção em vulnerabilidade de ''buffer overflow'' na função <code>apache_request_headers()</code>.
|-
| style="background:salmon;" | 5.4.4
|{{nowrap|2012-06-06}}
| [http://www.php.net/ChangeLog-5.php#5.4.4 correções de bugs].
|-
| style="background:salmon;" | 5.4.5
|{{nowrap|2012-07-19}}
| [http://www.php.net/ChangeLog-5.php#5.4.5 correções de bugs].
|-
| style="background:salmon;" | 5.4.6
|{{nowrap|2012-08-16}}
| [http://www.php.net/ChangeLog-5.php#5.4.6 correções de bugs].
|-
| style="background:salmon;" | 5.4.7
|{{nowrap|2012-09-13}}
| [http://www.php.net/ChangeLog-5.php#5.4.7 correções de bugs].
|-
| style="background:salmon;" | 5.4.11
|{{nowrap|2013-01-17}}
| [http://www.php.net/ChangeLog-5.php#5.4.11 correções de bugs].
|-
| style="background:salmon;" | 5.5.0
|{{nowrap|2013-06-20}}
| [http://www.php.net/ChangeLog-5.php#5.5.0 correções de bugs].
|-
| style="background:#FCED77;" | 5.6.9
|{{nowrap|2015-05-14}}
| [http://www.php.net/ChangeLog-5.php#5.6.9 correções de bugs].
|-
! rowspan="4" | 7
| style="background:#a0e75a;" | 7.0.0
|{{nowrap|2015-12-03}}
|Após muitos anos de desenvolvimento, finalmente a linguagem foi lançada, porém com uma performance surpreendente. A nova versão não trouxe apenas melhorias em performance, mas também novas funcionalidades, além de implementar e fortificar novos recursos na orientação a objetos.
|-
| style="background:#a0e75a;" | 7.1.0
|2016-12-01
|[http://www.php.net/ChangeLog-5.php#5.6.9 correções de bugs] [http://php.net/ChangeLog-7.php#7.1.0].
|-
| style="background:#a0e75a;" | 7.2.3
|2018-03-01
|[http://php.net/ChangeLog-7.php#7.2.3 correções de bugs].
|-
|7.3.3
|2019-03-07
|[http://php.net/archive/2019.php#id2019-03-07-1 correções de bugs].
|}
|}


Linha 286: Linha 237:
* [[Orientação a objetos]].
* [[Orientação a objetos]].
* Portabilidade - [[multiplataforma|independência de plataforma]] - escreva uma vez, rode em qualquer lugar.
* Portabilidade - [[multiplataforma|independência de plataforma]] - escreva uma vez, rode em qualquer lugar.
* [[Tipagem dinâmica]].
* [[Sistema de tipos|Tipagem dinâmica]].
* Sintaxe similar a [[C (linguagem de programação)|C]]/[[C++]] e o [[Perl]].
* Sintaxe similar a [[C (linguagem de programação)|C]]/[[C++]] e o [[Perl]].
* [[Código aberto|Open-source]].
* [[Código aberto|Open-source]].
Linha 315: Linha 266:


== Exemplo 2 - Teste de Conexão==
== Exemplo 2 - Teste de Conexão==
O exemplo abaixo testa se ha conexão com o banco de dados.
O exemplo abaixo testa se conexão com o banco de dados.
<p>
<p>
<syntaxhighlight lang="PHP">
<syntaxhighlight lang="PHP">
Linha 337: Linha 288:
O exemplo abaixo testa se usuário está com login no banco de dados.
O exemplo abaixo testa se usuário está com login no banco de dados.
<p>
<p>
<syntaxhighlight lang="PHP">
<syntaxhighlight lang="php">
<?php
<?php
// função verifica se o login está feito
// função verifica se o login está feito
function checaLogin($login){
function checaLogin($login, $status){
       if(isset($login['login'])){
       if(isset($login['login'])){
             if(!empty($login['login']) and ($status['status'] == false)) {
             if(!empty($login['login']) and ($status['status'] == false)) {
                 $aviso = 'Você não está logado, faça o login para continuar'  
                 $aviso = 'Você não está logado, faça o login para continuar';
                 $status=false
                 $status=false;
                 echo $aviso;
                 echo $aviso;
                 die();
                 die();
                }
            }
        } else {
            $status['status'] = true;
            $aviso = 'Você está logado';
            echo $aviso;
         }
         }
        else{
            $status=true
            $aviso = 'Você está logado'
            echo $aviso;
            }
     }
     }
?>
?>
Linha 414: Linha 364:


== Extensões ==
== Extensões ==
[[Extensão (computação)|Extensões]] do PHP:
[[Extensão de nome de ficheiro|Extensões]] do PHP:
{{duas colunas|
{{duas colunas|
* Funções de compressão de [[bzip2]]
* Funções de compressão de [[bzip2]]
Linha 485: Linha 435:
* [[PHP-GTK]]
* [[PHP-GTK]]
* [[Revista PHPReview]]
* [[Revista PHPReview]]
* [[WAMP5]]
* [[WampServer|WAMP5]]
* [[EasyPHP]]
* [[EasyPHP]]
* [[ScriptCase]]
* [[ScriptCase]]
* [[XAMPP]]
* [[XAMPP]]
* [[XPTO]]
* [[X.P.T.O.|XPTO]]
* [[Lista de linguagens de programação]]
* [[Lista de linguagens de programação]]



Edição atual tal como às 02h23min de 23 de agosto de 2022

Predefinição:Info/Linguagem de computador PHP (um acrônimo recursivo para "PHP: Hypertext Preprocessor", originalmente Personal Home Page) é uma linguagem interpretada livre, usada originalmente apenas para o desenvolvimento de aplicações presentes e atuantes no lado do servidor, capazes de gerar conteúdo dinâmico na World Wide Web.[1] Figura entre as primeiras linguagens passíveis de inserção em documentos HTML, dispensando em muitos casos o uso de arquivos externos para eventuais processamentos de dados. O código é interpretado no lado do servidor pelo módulo PHP, que também gera a página web a ser visualizada no lado do cliente. A linguagem evoluiu, passou a oferecer funcionalidades em linha de comando, e além disso, ganhou características adicionais, que possibilitaram usos adicionais do PHP, não relacionados a web sites. É possível instalar o PHP na maioria dos sistemas operacionais, gratuitamente. Concorrente direto da tecnologia ASP pertencente à Microsoft, o PHP é utilizado em aplicações como o MediaWiki, Facebook, Drupal, Joomla!, WordPress, Magento e o Oscommerce.

Criado por Rasmus Lerdorf em 1995, o PHP tem a produção de sua implementação principal, referência formal da linguagem, mantida por uma organização chamada The PHP Group. O PHP é software livre, licenciado sob a PHP License, uma licença incompatível com a GNU General Public License (GPL) devido a restrições no uso do termo PHP.

História

A linguagem foi criada em 1994 e o código fonte do PHP só foi liberado em 1995, como um pacote de programas CGI criados por Rasmus Lerdorf, com o nome Personal Home Page Tools, para substituir um conjunto de scripts Perl que ele usava no desenvolvimento de sua página pessoal. Em 1997 foi lançado o novo pacote da linguagem com o nome de PHP/FI, trazendo a ferramenta Forms Interpreter, um interpretador de comandos SQL. Mais tarde, Zeev Suraski desenvolveu o analisador do PHP 3 que contava com o primeiro recurso de orientação a objetos, que dava poder de alcançar alguns pacotes, tinha herança e dava aos desenvolvedores somente a possibilidade de implementar propriedades e métodos.[2][3] Pouco depois, Zeev e Andi Gutmans, escreveram o PHP 4, abandonando por completo o PHP 3, dando mais poder à máquina da linguagem e maior número de recursos de orientação a objetos. O problema sério que apresentou o PHP 4 foi a criação de cópias de objetos, pois a linguagem ainda não trabalhava com apontadores ou handlers, como são as linguagens Java, Ruby e outras. O problema fora resolvido na versão 5 do PHP, que já trabalha com handlers. Caso se copie um objeto, na verdade copiaremos um apontador, pois, caso haja alguma mudança na versão original do objeto, todas as outras também sofrem a alteração, o que não acontecia na PHP 4.[4]

Trata-se de uma linguagem extremamente modularizada, o que a torna ideal para instalação e uso em servidores web. Diversos módulos são criados no repositório de extensões PECL (PHP Extension Community Library) e alguns destes módulos são introduzidos como padrão em novas versões da linguagem. É muito parecida, em tipos de dados, sintaxe e mesmo funções, com a linguagem C e com a C++. Pode ser, dependendo da configuração do servidor, embarcada no código HTML. Existem versões do PHP disponíveis para os seguintes sistemas operacionais: Windows, Linux, FreeBSD, Mac OS, OS/2, AS/400, Novell Netware, RISC OS, AIX, IRIX e Solaris.

Construir uma página dinâmica baseada em bases de dados é simples com PHP, (em parte, vale lembrar), este provê suporte a um grande número de bases de dados: Oracle, Sybase, PostgreSQL, InterBase, MySQL, SQLite, MSSQL, Firebird, etc., podendo abstrair o banco com a biblioteca ADOdb, entre outras. A Wikipédia funciona sobre um software inteiramente escrito em PHP, usando bases de dados MySQL: o MediaWiki.[4]

PHP tem suporte aos protocolos: IMAP, SNMP, NNTP, POP3, HTTP, LDAP, XML-RPC, SOAP. É possível abrir sockets e interagir com outros protocolos. E as bibliotecas de terceiros expandem ainda mais estas funcionalidades. Existem iniciativas para utilizar o PHP como linguagem de programação de sistemas fixos. A mais notável é a PHP-GTK. Trata-se de um conjunto do PHP com a biblioteca GTK, portada do C++, fazendo assim softwares inter-operacionais entre Windows e Linux. Na prática, essa extensão tem sido muito pouco utilizada para projetos reais.[4]

O acrônimo recursivo PHP representa um elefante, que é conhecido como o mascote da linguagem.

Licença

PHP é um software gratuito e de código aberto disponível sob a PHP License, que afirma:[5] Página Predefinição:Quote/styles.css não tem conteúdo.

Produtos derivados deste software não devem ser chamado de PHP, nem pode conter "PHP" em seu nome, sem prévia permissão por escrito da [email protected]. Você pode indicar que o software funciona em conjunto com o PHP, dizendo "Foo para PHP", em vez de chamá-lo "PHP Foo" ou "phpfoo".

Esta restrição no uso do nome PHP torna-o incompatível com a GNU General Public License (GPL).[6]

PHP 6 e Unicode

PHP recebeu diversas críticas por não ter suporte nativo a Unicode.[7][8] Em 2005, um projeto liderado por Andrei Zmievski foi iniciado para trazer esse dito suporte ao PHP através da incorporação da biblioteca International Components for Unicode (ICU) para poder passar-se a usar a codificação UTF-16.[9] Uma vez que isso causaria grandes mudanças tanto no código fonte como para o usuário, foi planejado lançá-la na versão 6.0 em conjunto com outros importantes recursos, então em desenvolvimento, em vez da 5.5.[10]

Entretanto, devido a falta de desenvolvedores que entendessem as mudanças necessárias e problemas de desempenho decorrentes da conversão para UTF-16, que raramente é usado em um contexto web, levou a atrasos no projeto. Como resultado, o PHP 5.3 foi lançado em 2009, sem total suporte ao Unicode, mas contendo algumas das novidades que seriam lançadas no PHP 6.0. Em março de 2010, o projeto em sua forma atual foi oficialmente abandonado, e uma versão 5.4 do PHP foi feita ainda sem total suporte a Unicode, também contendo as novidades que seriam lançadas no PHP 6.0.[11] Esperanças iniciais eram de que um novo plano seria formado para ter a integração Unicode, mas a partir de 2014 nenhum foi adotado.

Durante os anos, antes do lançamento do PHP 5.3 e 5.4, alguns livros foram publicados com base no conjunto de recursos esperado de PHP 6.0, incluindo o suporte a Unicode e os recursos que depois foram trazidos para outros lançamentos. Há, portanto, algum debate sobre se uma nova versão principal do PHP, com ou sem suporte a Unicode, deve ser chamado de "PHP 6", ou se a nomenclatura deve ser ignorado para evitar confusão.

Histórico de versões

Versão Data de lançamento original Última versão Suportada até[12][13] Notas
Predefinição:Versão 8 de junho de 1995 Predefinição:Dunno Predefinição:Dunno Oficialmente chamado de "Personal Home Page Tools (PHP Tools)" (Ferramentas para página pessoal). Este foi o primeiro uso para o nome "PHP".
Predefinição:Versão 1 de novembro de 1997 Predefinição:Dunno Predefinição:Dunno Considerado pelo seu criador como a "mais rápida e simples ferramenta" para criar páginas dinâmicas para a Web.
Predefinição:Versão 6 de junho de 1998 3.0.18 20 de outubro de 2000 O desenvolvimento passou a ser feito por vários desenvolvedores em colaboração. Zeev Suraski e Andi Gutmans reescreveram toda a base do PHP nesta versão.
Predefinição:Versão 22 de maio de 2000 4.0.6 23 de junho de 2001 Foi adicionado um melhor sistema de análise sintática (parser) chamado de motor Zend (Zend engine).[14]
Predefinição:Versão 10 de dezembro de 2001 4.1.2 12 de março de 2002 Introduzidas as 'superglobais' ($_GET, $_POST, $_SESSION, etc.)[14]
Predefinição:Versão 22 de abril de 2002 4.2.3 6 de setembro de 2002 A register_globals passou agora a estar desativada por padrão. Dados recebidos via rede são mais inseridos no escopo de variável global, fechando possíveis brechas de segurança.[14]
Predefinição:Versão 27 de dezembro de 2002 4.3.11 31 de março de 2005 Introduziu sua interface de linha de comando (command-line interface - CLI), para complementar o CGI.[14][15]
Predefinição:Versão 11 de julho de 2005 4.4.9 7 de agosto de 2008 Adicionadas as páginas do manual para os scripts phpize e php-config.[14]
Predefinição:Versão 13 de julho de 2004 5.0.5 5 de setembro de 2005 Zend Engine II com um novo modelo de objeto.[16]
Predefinição:Versão 24 de novembro de 2005 5.1.6 24 de agosto de 2006 Melhorias na performance com a introdução de variáveis de compilação na reengenharia do motor PHP.[16] Adicionada biblioteca PHP Data Objects (PDO) como uma nova interface de acesso aos bancos de dados.[17][18]
Predefinição:Versão 2 de novembro de 2006 5.2.17 6 de janeiro de 2011 Habilitado por padrão o filtro de extensões. Suporte ao JSON nativo.[16][19]
Predefinição:Versão 30 de junho de 2009 5.3.29 14 de agosto de 2014 Suporte a espaço de nomes (namespace), vinculação de nomes (late static bindings), rótulos de salto de código (goto limitado), clausura nativa, arquivos PHP nativos (phar), coletor de lixo para referências circulares, suporte ao Windows melhorado, sqlite3, mysqlnd em substituição a libmysql como biblioteca de extensão de trabalho com MySQL, fileinfo em substituição ao mime_magic para um melhor suporte ao MIME, extensão de internacionalização, e descontinuidade da extensão ereg.[20]
Predefinição:Versão 1 de março de 2012 5.4.45 3 de setembro de 2015 Suporte à trait, suporte a uma versão mais curta na sintaxe de vetores. Items removidos: register_globals, safe_mode, allow_call_time_pass_reference, session_register(), session_unregister() and session_is_registered(). Servidor web embutido.[21]. Várias melhorias nas fucionalidades já existentes e na performance. Redução dos requerimentos de memória.[22]
Predefinição:Versão 20 de junho de 2013 5.5.38 21 de julho de 2016 Suporte para geradores, blocos finally para tratamento de exceções, OpCache (baseado em Zend Optimizer+) empacotado na distribuição oficial.[23]
Predefinição:Versão 28 de agosto de 2014 5.6.40 31 de dezembro de 2018 Expressões escalares constantes, funções variádicas, desempacotamento de argumento, novo operador de exponenciação, extensões da instrução use para funções e constantes, novo depurador phpdbg como um módulo SAPI e outras melhorias menores.[24]
6.x Não foi lançada Versão abandonada do PHP que planejava incluir suporte nativo ao Unicode.
Predefinição:Versão 3 de dezembro de 2015 7.0.33 10 de janeiro de 2019 Zend Engine 3 (melhorias de desempenho e suporte a inteiros de 64 bits no Windows), sintaxe de variável uniforme, processo de compilação baseado em árvore sintática abstrata, adicionado Closure::call(), consistência de deslocamento bit a bit entre plataformas, operador ?? (coalescência nula), sintaxe de escape de ponto de código Unicode, declarações de tipo de retorno, declarações de tipo escalar (inteiro, flutuante, string e boolean), operador de comparação de três vias "nave espacial" <=>, delegação de gerador, classes anônimas, API CSPRNG mais simples e disponível de maneira mais consistente, substituição de muitos "erros" internos restantes do PHP pelas exceções mais modernas e sintaxe abreviada para importar vários itens de um espaço de nomes.[25]
Predefinição:Versão 1 de dezembro de 2016 7.1.33 1 de dezembro de 2019 Tipo de retorno void, modificadores de visibilidade de constante de classe.[26]
Predefinição:Versão 30 de novembro de 2017 7.2.34 30 de novembro de 2020 Parâmetro de objeto e declaração de tipo de retorno, extensão Libsodium, substituição de método abstrato, ampliação de tipo de parâmetro.[27]
Predefinição:Versão 6 de dezembro de 2018 7.3.33 6 de dezembro de 2021 Sintaxe flexível Heredoc e Nowdoc, suporte para atribuição de referência e desconstrução de array com list(), suporte à PCRE2, função hrtime().[28]
Predefinição:Versão 28 de novembro de 2019 7.4.28 28 de novembro de 2022 Propriedades tipadas 2.0, pré-carregamento, operador de atribuição de coalescência nula, openssl_random_pseudo_bytes melhorada, referências fracas, FFI - interface de função externa, extensão hash sempre disponível, registro de hash de senha, divisão de string multibyte, reflexão para referências, remoção de ext/wddx, novo mecanismo de serialização de objeto personalizado.[29]
Predefinição:Versão 26 de novembro de 2020 8.0.16 26 de novembro de 2023 Compilação Just-In-Time (JIT), arrays começando com um índice negativo, semântica de linguagem mais rígida/sã (validação para métodos de traços abstratos), comparações de string para números mais sãs, strings numéricas mais sãs, TypeError em operadores aritméticos/bit-a-bit inválidos, reclassificação de vários erros de mecanismo, erros de tipo consistentes para funções internas, erro fatal para assinaturas de método incompatíveis), conversão de float para string independente de localidade, ajustes de sintaxe variável, atributos, argumentos nomeados, expressão de correspondência, promoção de propriedade do construtor, tipos em união, tipo misto, tipo de retorno static, operador nullsafe, non-capturing catches, expressão throw, extensão JSON está sempre disponível.[30]
Predefinição:Versão 25 de novembro de 2021 8.1.5 25 de novembro de 2024 Notação literal de inteiro octal explícita, enumerações, propriedades somente leitura, sintaxe chamável de primeira classe, new em inicializadores, tipos de interseção puros, tipo de retorno never, restrições de classe final, fibers.[31]
Predefinição:Versão

Principais características

A linguagem PHP é uma linguagem de programação de domínio específico, ou seja, seu escopo se estende a um campo de atuação que é o desenvolvimento web, embora tenha variantes como o PHP-GTK. Seu propósito principal é de implementar soluções web velozes, simples e eficientes[32]. Características:

Exemplo 1 - Vetores e matrizes

Os vetores e matrizes em PHP, diferente do que ocorre em C/C++ e Pascal, são estruturas dinâmicas, o que pode facilitar muito o trabalho do programador.

Um exemplo:

<?php
  $vet01 = array();
  $vet01[] = "Sistemas operacionais";
  $vet01[] = "Compiladores";
  $vet01[] = "Bancos de dados";
  $vet02 = array(1, 2, 3, 4, 5);
  $vet03 = array( 0 => 0, 2 => 3, 10 => "item 10");
  $vet04 = ['valor 1', 'string 2', 3, 4.0, false];
  $vet05 = ["chave1" => 'valor 1', 2, 3, 4, array('item 1', 2 => 0.5)];
  for ($i = 0; $i < count($vet01); $i++) {
    echo $vet01[$i] . "<br />";
  }
?>

O exemplo acima demonstra cinco maneiras diferentes de declarar vetores, sendo que os índices não são obrigatórios, e se declarados não precisam ser apenas números ou mesmo sequenciais.

Os exemplos $vet04 e $vet05 mostram que é possível misturar tipos de dados dentro do vetor, sendo que no $vet05 mostra que em qualquer posição do vetor é possível declarar um outro vetor, resultando em uma matriz.

Exemplo 2 - Teste de Conexão

O exemplo abaixo testa se há conexão com o banco de dados.

<?php
// Conexão com o banco de dados
$host = "localhost";
$db   = "nome-database";
$user = "root";
$pass = "";
$con = mysql_connect($host,$user,$pass);
if(mysql_select_db($db, $con)){
  echo "conexao bem sucedida"; //Teste para garantir que há conexão
}
else {
  echo"conexao falhou";
}
?>

Exemplo 3 - Teste de Login

O exemplo abaixo testa se usuário está com login no banco de dados.

<?php
// função verifica se o login está feito
function checaLogin($login, $status){
      if(isset($login['login'])){
            if(!empty($login['login']) and ($status['status'] == false)) {
                $aviso = 'Você não está logado, faça o login para continuar';
                $status=false;
                echo $aviso;
                die();
            }
        } else {
             $status['status'] = true;
             $aviso = 'Você está logado';
             echo $aviso;
        }
    }
?>

Exemplo 4 - Função Dias da Semana

O exemplo abaixo conforme a data atual, obtém os dias da semana.

<?php
date_default_timezone_set("Brazil/São Paulo");
function diasemana($data) {
$d = explode('/', $data);
$anohoje = $d[2];
$meshoje = $d[1];
$diahoje = $d[0];
$diasemana = date("w", mktime(0,0,0,$meshoje,$diahoje,$anohoje) );
switch($diasemana)
{
case"0": $diasemana = "Domingo";       break;
case"1": $diasemana = "Segunda Feira"; break;
case"2": $diasemana = "Terça Feira";   break;
case"3": $diasemana = "Quarta Feira";  break;
case"4": $diasemana = "Quinta Feira";  break;
case"5": $diasemana = "Sexta Feira";   break;
case"6": $diasemana = "Sabado";        break;
}
return "$diasemana";
}
echo '<h1>' , diasemana('20/05/2017') ,  ' - Dia da Semana ' , '</h1>' ;
?>

PHP 5

Em junho de 2004 foi lançada a versão 5 do PHP, introduzindo um novo modelo de orientação a objeto, incluindo a reformulação dos construtores e adição de destrutores (ver exemplo contextualizado em anexo), visibilidade de acesso, abstração de objeto e interfaces de objetos.[35]

O tratamento de objetos do PHP foi completamente reescrito, permitindo um desempenho melhor e mais vantagens. Enquanto na versão anterior era preciso muito esforço para atender à orientação a objetos e aos padrões de projectos (alguns não eram possíveis), o PHP 5 veio para sanar essa deficiência. Ainda sofre nesse sentido, contudo, por problemas devido a ser uma linguagem de tipagem fraca.[35]

Indução de tipo

Nesse sentido, foi adicionada uma característica chamada de indução de tipo, de acordo com a qual podemos ter uma certa tipagem quando passamos objetos aos parâmetros de uma função (ou método), algo inconcebível na versão anterior. Ver exemplo contextualizado em anexo.[carece de fontes?]

Visibilidade

A visibilidade de uma propriedade ou método pode ser definida com os seguintes modificadores de acesso: public, protected ou private. Itens declarados como públicos podem ser acessados pelo objeto (instância da classe). Membros protegidos estão acessíveis às classes filhas (herdadas). A visibilidade privada limita a apenas a classe que define o atributo ou método. Ver exemplo contextualizado em anexo.[carece de fontes?]

Polimorfismo

  1. REDIRECIONAMENTO Predefinição:VT

Polimorfismo Paramétrico

No polimorfismo paramétrico, um mesmo objeto pode ser utilizado uniformemente como parâmetro em diferentes contextos sem necessidade de alterações. Um método que exibe polimorfismo paramétrico (também chamada de método genérico) permite que o tipo do seu argumento seja determinado por um parâmetro de tipo implícito ou explícito, executando uma mesma operação, independente do tipo do argumento. O PHP não requer (ou suporta) a definição de tipo explícita na declaração de variáveis: o tipo de uma variável é determinado pelo:[carece de fontes?]

  • contexto em que a variável é utilizada. Isto significa que, se você atribuir um valor string para a variável $var, $var se torna uma string
  • Se você então atribuir um valor inteiro para $var, ela se torna um inteiro. Por isso o PHP não adota este tipo de polimorfismo, pois não possui parâmetros genéricos

Polimorfismo por Inclusão

No polimorfismo por inclusão um objeto pode ser visto como pertencendo a diferentes classes que não precisam ser disjuntas. O PHP adota esse tipo de polimorfismo, pois é uma linguagem orientada a objeto que permite recursos de herança[36][37].

Polimorfismo por Coerção

O PHP também suporta o polimorfismo por coerção, no qual a linguagem dispõe de uma operação semântica para converter um argumento para um tipo esperado por uma função, em uma situação que de outra forma resultaria em um erro de tipo.[carece de fontes?]

Extensões

Extensões do PHP:

  • Funções de compressão de bzip2
  • Funções de conversão de Calendar
  • Funções de ClibPDF
  • Funções de crack
  • Família de funções ctype
  • Biblioteca de rotinas de cliente URL - CURL
  • Funções de pagamento Cybercash
  • Funções DBM
  • Camada de funções de abstração de banco de dados DBA
  • Funções de dBase
  • Funções dbx
  • Funções DOM XML
  • Funções .NET
  • Funções EXIF
  • Funções FrontBase
  • Funções de formato de dados de formulários (Forms Data Format) FDF.
  • Funções de filePro
  • Funções de FTP
  • Funções da biblioteca de imagens GD
  • Funções de Gettext
  • Funções de HyperWave
  • Conversão de tabela de caracteres ICONV
  • Funções de Informix
  • Funções de manuseio de IIS
  • Funções de IMAP POP3 e NNTP
  • Funções de Ingres II
  • Funções de InterBase
  • Funções de Java
  • Funções de LDAP
  • Funções de Multi-Byte String
  • Funções de Mcrypt Encryption
  • Funções de Mhash
  • Funções de Mimetype
  • Funções de Ming para Flash
  • Funções de mSQL
  • Funções de MSSQL
  • Funções de MySQL
  • Funções de MySQLi
  • Funções de Oracle 8
  • Funções de OpenSSL
  • Funções de Oracle
  • Funções de sobrecarga de objectos
  • Funções de PDF
  • Funções de PostgreSQL
  • Funções de impressora
  • Funções de memória compartilhada
  • Funções de get and walk de SNMP
  • Funções de SOAP
  • Funções de sockets
  • Funções de SQLite
  • Funções de Sybase
  • Funções de Tidy
  • Funções de Tokenizer
  • Funções de W32api
  • Funções de XML-RPC
  • Funções de XSLT
  • Funções do YAZ
  • Funções para Arquivos Zip
  • Funções de compressão de ZLib

Ver também

Wikilivros
O Wikilivros tem um livro chamado PHP

Referências

  1. «Manual oficial do PHP - Prefácio». php.net. Consultado em 7 de fevereiro de 2011 
  2. PHP on Hormones de Rasmus Lerdorf
  3. slides for 'PHP on Hormones' talk por Lerdorf
  4. 4,0 4,1 4,2 «PHP 6». The PHP project. Consultado em 27 de março de 2010 
  5. «The PHP License, version 3.01». Consultado em 20 de maio de 2010 
  6. «GPL-Incompatible, Free Software Licenses». Various Licenses and Comments about Them. Free Software Foundation. Consultado em 3 de janeiro de 2011 
  7. «Types: Strings». PHP Manual. PHP.net. Consultado em 26 de março de 2014 
  8. «Details of the String Type». PHP Manual. PHP.net. Consultado em 22 de setembro de 2013 
  9. Andrei Zmievski (10 de agosto de 2005). «PHP Unicode support design document (mailing list post)». Consultado em 26 de março de 2014 
  10. «PHP 5.5 or 6.0». Consultado em 26 de março de 2014 
  11. Rasmus Lerdorf (26 de março de 2014). «PHP 6 (mailing list post)». Consultado em 7 de fevereiro de 2014 
  12. «Unsupported Branches» (em English). php.net. Consultado em 2 de fevereiro de 2022 
  13. «Supported Versions» (em English). php.net. Consultado em 2 de fevereiro de 2022 
  14. 14,0 14,1 14,2 14,3 14,4 «PHP: PHP 4 ChangeLog». The PHP Group. 3 de janeiro de 2008. Consultado em 22 de fevereiro de 2008 
  15. «PHP: Using PHP from the command line – Manual:». The PHP Group. Consultado em 11 de setembro de 2009 
  16. 16,0 16,1 16,2 «PHP: PHP 5 ChangeLog». The PHP Group. 8 de novembro de 2007. Consultado em 22 de fevereiro de 2008 
  17. «PHP manual: PDO». The PHP Group. 15 de novembro de 2011. Consultado em 15 de novembro de 2011 
  18. «PHP 5.1.0 Release Announcement» (em English). php.net. 24 de novembro de 2005. Consultado em 29 de novembro de 2021 
  19. «PHP 5.2.0 Release Announcement» (em English). php.net. 2 de novembro de 2006. Consultado em 29 de novembro de 2021 
  20. «PHP 5.3.0 Release Announcement» (em English). php.net. 30 de junho de 2009. Consultado em 29 de novembro de 2021 
  21. «Built-in web server». Consultado em 26 de março de 2012 
  22. «PHP 5.4.0 Release Announcement» (em English). php.net. 1 de março de 2012. Consultado em 29 de novembro de 2021 
  23. «PHP 5.5.0 Release Announcement» (em English). php.net. 20 de junho de 2013. Consultado em 29 de novembro de 2021 
  24. «PHP 5.6.0 Release Announcement» (em English). php.net. 28 de agosto de 2014. Consultado em 29 de novembro de 2021 
  25. «PHP 7.0.0 Release Announcement» (em English). php.net. 3 de dezembro de 2015. Consultado em 29 de novembro de 2021 
  26. «PHP 7.1.0 Release Announcement» (em English). php.net. 1 de dezembro de 2016. Consultado em 29 de novembro de 2021 
  27. «PHP 7.2.0 Release Announcement» (em English). php.net. 30 de novembro de 2017. Consultado em 29 de novembro de 2021 
  28. «PHP 7.3.0 Release Announcement» (em English). php.net. 6 de dezembro de 2018. Consultado em 29 de novembro de 2021 
  29. «PHP 7.4.0 Release Announcement» (em English). php.net. 28 de novembro de 2019. Consultado em 29 de novembro de 2021 
  30. «PHP 8.0.0 Release Announcement» (em English). php.net. 26 de novembro de 2020. Consultado em 26 de novembro de 2020 
  31. «PHP 8.1.0 Release Announcement» (em English). php.net. 25 de novembro de 2021. Consultado em 29 de novembro de 2021 
  32. «PHP Hypertext Preprocessor» 
  33. «Improving PHP Performance for Web Applications» 
  34. «PHP: maduro, robusto e próprio para a Internet» 
  35. 35,0 35,1 «PHP 5.3 migration guide». The PHP project. Consultado em 3 de julho de 2009 
  36. «Classes and Objects» 
  37. «Object Inheritance» 

Bibliografia

Ligações externas

talvez você goste