PHP: diferenças entre revisões
m adicionou Categoria:Linguagens de programação criadas em 1995 usando HotCat |
|||
Linha 10: | Linha 10: | ||
|criador = [[Rasmus Lerdorf]] |
|criador = [[Rasmus Lerdorf]] |
||
|mantenedor = [[Zend]] |
|mantenedor = [[Zend]] |
||
|tipagem = |
|tipagem = dinâmicag |
||
|compiladores = [[Linguagem interpretada]] |
|compiladores = [[Linguagem interpretada]] |
||
|dialetos = |
|dialetos = |
Revisão das 11h38min de 24 de outubro de 2013
PHP | |
---|---|
Paradigma | procedural, reflexão, orientação a objetos, funcional |
Surgido em | 1995 |
Última versão | 5.5.0[1] (20 de junho de 2013 ) |
Criado por | Rasmus Lerdorf |
Estilo de tipagem | dinâmicag |
Principais implementações | Linguagem interpretada |
Influenciada por | C, C++, Perl, Java, Tcl |
Página oficial | www.php.net |
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.[2] 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órico
A linguagem surgiu em meados de 1994, 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.[3][4] 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 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.[5]
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.[5]
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.[5]
Licença
PHP é um software gratuito e de código aberto publicado sob a PHP License, que afirma:[6]
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 group@php.net. 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 o torna incompatível com a GNU General Public License (GPL).[7]
Histórico de versões
Legenda | |
---|---|
Vermelho | Versão não mais suportada |
Verde | Versão suportada |
Azul | Próximas versões |
Versão principal | Versão intermediária | Data de lançamento | Notas |
---|---|---|---|
1 | 1.0.0 | 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 | 2.0.0 | 1997-11-01 | Considerado pelo seu criador como a "mais rápida e simples ferramenta" para criar páginas dinâmicas para a Web. |
3 | 3.0.0 | 1998-06-06 | 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. |
3.0.18 | 2000-10-20 | Última versão para do PHP 3.0.x. Unsupported Historical Releases | |
4 | 4.0.0 | 2000-05-22 | Foi adicionado um melhor sistema de análise sintática (parser) chamado de motor Zend (Zend engine).[8] |
4.1.0 | 2001-12-10 | Introduzidas as 'superglobais' ($_GET , $_POST , $_SESSION , etc.)[8]
| |
4.2.0 | 2002-04-22 | 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.[8]
| |
4.3.0 | 2002-12-27 | Introduziu sua interface de linha de comando (command-line interface - CLI), para complementar o CGI.[8][9] | |
4.4.0 | 2005-07-11 | Adicionadas as páginas do manual para os script phpize e php-config .[8]
| |
4.4.9 | 2008-08-07 | Melhorias na segurança e correção de bugs. Última versão do PHP 4.4.x.[10][11] | |
5 | 5.0.0 | 2004-07-13 | Zend Engine II com um novo modelo de objeto.[12] |
5.1.0 | 2005-11-24 | Melhorias na performance com a introdução de variáveis de compilação na reengenharia do motor PHP.[12] Adicionada biblioteca PHP Data Objects (PDO) como uma nova interface de acesso aos bancos de dados. [13] | |
5.2.0 | 2006-11-02 | Habilitado por padrão o filtro de extensões. Suporte JSON nativo.[12] | |
5.2.16 | 2010-12-16 | Última versão para a série 5.2.[14] | |
5.2.17 | 2011-01-06 | Correção de vulnerabilidade crítica relacionada a ponto flutuante. | |
5.3.0 | 2009-06-30 | Suporte a nomes de espaço (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 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 MIME, extensão de internacionalização, e descontinuidade da extensão ereg/ | |
5.3.1 | 2009-11-19 | Mais de 100 conrreções de problemas, dentre eles algumas falhas de segurança. | |
5.3.2 | 2010-03-04 | Grande número de correção de bugs. | |
5.3.3 | 2010-07-22 | Principalmente correções de bugs e segurança; FPM SAPI. | |
5.3.4 | 2010-12-10 | Principalmente correções de bugs e segurança; FPM SAPI melhorado. | |
5.3.5 | 2011-01-06 | Conserto de erro crítico relacionado a ponto flutuante. | |
5.3.6 | 2011-03-10 | Mais de 60 correções de bug reportados em versões anteriores. | |
5.3.7 | 2011-08-18 | 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. | |
5.3.8 | 2011-08-23 | Esta versão corrigiu dois problemas introduzidos na versão PHP 5.3.7. | |
5.3.9 | 2012-01-10 | Esta versão focou-se na melhoria da estabilidade da série PHP 5.3.x. | |
5.3.10 | 2012-02-02 | Corrigida execução remota arbitrária reportada por Stefan Esser, CVE-2012-0830. | |
5.3.13 | 2012-05-08 | Corrigida vulnerabilidade nas instalações utilizando CGI. | |
5.3.14 | 2012-06-06 | bugs corrigidos. | |
5.3.15 | 2012-07-19 | bugs corrigidos. | |
5.3.16 | 2012-08-16 | bugs corrigidos. | |
5.3.17 | 2012-09-13 | bugs corrigidos. | |
5.3.21 | 2013-01-17 | bugs corrigidos. | |
5.4.0 | 2012-03-01 | 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.[15]. Várias melhorias nas fucionalidades já existentes e na performance. Redução dos requerimentos de memória.
| |
5.4.1 | 2012-04-26 | correções de bugs. | |
5.4.2 | 2012-05-03 | Pacote de segurança para corrigir vulnerabilidade em chamadas PHP-CGI. | |
5.4.3 | 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 apache_request_headers() .
| |
5.4.4 | 2012-06-06 | correções de bugs. | |
5.4.5 | 2012-07-19 | correções de bugs. | |
5.4.6 | 2012-08-16 | correções de bugs. | |
5.4.7 | 2012-09-13 | correções de bugs. | |
5.4.11 | 2013-01-17 | correções de bugs. | |
5.5.0 | 2013-06-20 | correções de bugs. | |
6 | 6.0.0 | Sem data prevista | O desenvolvimento do PHP 6 foi adiado pois os desenvolvedores decidiram que a abordagem atual de tratamento das instâncias unicode não está boa e estão considerando novas alternativas na nova versão do PHP.[16] As atualizações pretendidas no PHP 6 foram incluídas ao PHP PHP 5.3.0 (suporte a namespace , late static bindings, funcções lambda, clausuras, goto) e 5.4.0 (traits, closure rebinding).
|
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[17]. Características:
- Velocidade[18][19][20] e robustez[21][22].
- Estruturado e orientação a objetos.
- Portabilidade - independência de plataforma - escreva uma vez, rode em qualquer lugar.
- Tipagem dinâmica.
- Sintaxe similar a C/C++ e o Perl.
- Open-source.
- Server-side (O cliente manda o pedido e o servidor responde em pagina HTML)
Vetores e matrizes
Os vetores e matrizes em PHP, diferente do que ocorre em C/C++ e Pascal, é uma estrutura dinâmica, 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");
for ($i = 0; $i < count($vet01); $i++) {
echo $vet01[$i] . "<br />";
}
?>
O exemplo acima demonstra três maneiras diferentes de declarar vetores.
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.[23]
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.[23]
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
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[24][25].
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 socket
- 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
- Anexo:Lista de exemplos de código PHP
- MySQL
- Servidor Apache
- Perl
- PHP-GTK
- Revista PHPReview
- WAMP5
- EasyPHP
- ScriptCase
- XAMPP
- XPTO
Referências
- ↑ «PHP 5.5.0 released.» (em inglês). PHP.net. 20 de junho de 2013. Consultado em 21 de junho de 2013
- ↑ «Manual oficial do PHP - Prefácio». php.net. Consultado em 7 de fevereiro de 2011
- ↑ PHP on Hormones de Rasmus Lerdorf
- ↑ slides for 'PHP on Hormones' talk por Lerdorf
- ↑ a b c «PHP 6». The PHP project. Consultado em 27 de março de 2010
- ↑ «The PHP License, version 3.01». Consultado em 20 de maio de 2010
- ↑ «GPL-Incompatible, Free Software Licenses». Various Licenses and Comments about Them. Free Software Foundation. Consultado em 3 de janeiro de 2011
- ↑ a b c d e «PHP: PHP 4 ChangeLog». The PHP Group. 3 de janeiro de 2008. Consultado em 22 de fevereiro de 2008
- ↑ «PHP: Using PHP from the command line – Manual:». The PHP Group. Consultado em 11 de setembro de 2009
- ↑ «Downloads». PHP. Consultado em 29 de julho de 2009
- ↑ «4.4.9 Release Announcement». PHP. Consultado em 29 de julho de 2009
- ↑ a b c «PHP: PHP 5 ChangeLog». The PHP Group. 8 de novembro de 2007. Consultado em 22 de fevereiro de 2008
- ↑ «PHP manual: PDO». The PHP Group. 15 de novembro de 2011. Consultado em 15 de novembro de 2011
- ↑ PHP: News Archive - 2010
- ↑ «Built-in web server». Consultado em March 26 2012 Verifique data em:
|acessodata=
(ajuda) - ↑ «PHP 6: Features, Release Date, Hosting and Download». Consultado em May 6 2011 Verifique data em:
|acessodata=
(ajuda) - ↑ «PHP Hypertext Preprocessor»
- ↑ «Python vs PHP, Python runs slower?»
- ↑ «Benchmark: PHP vs. Python vs. Perl vs. Ruby»
- ↑ «PHP performance tips»
- ↑ «Aplicativos em PHP/Apêndices/Segurança/Escrevendo Código Robusto em PHP»
- ↑ «PHP: maduro, robusto e próprio para a Internet»
- ↑ a b «PHP 5.3 migration guide». The PHP project. Consultado em 3 de julho de 2009
- ↑ «Classes and Objects»
- ↑ «Object Inheritance»
Bibliografia
- SICA, Carlos (2011). PHP COM TUDO 1 ed. [S.l.]: Ciência Moderna. ISBN 978-85-399-0002-2 Parâmetro desconhecido
|Autor=
ignorado (|autor=
) sugerido (ajuda); Parâmetro desconhecido|Volumes=
ignorado (|volume=
) sugerido (ajuda); Parâmetro desconhecido|Volume=
ignorado (|volume=
) sugerido (ajuda); Parâmetro desconhecido|Páginas=
ignorado (|páginas=
) sugerido (ajuda) - SICA, Carlos (2006). PHP Orientado a Objetos. Fale a Linguagem da Internet 1 ed. [S.l.]: Ciência Moderna. ISBN 978-85-7393-553-0 Parâmetro desconhecido
|Autor=
ignorado (|autor=
) sugerido (ajuda); Parâmetro desconhecido|Volumes=
ignorado (|volume=
) sugerido (ajuda); Parâmetro desconhecido|Volume=
ignorado (|volume=
) sugerido (ajuda); Parâmetro desconhecido|Páginas=
ignorado (|páginas=
) sugerido (ajuda) - SICA, Carlos (2007). Programação Segura Utilizando PHP. Fale a Linguagem da Internet 1 ed. [S.l.]: Ciência Moderna. ISBN 978-85-7393-608-7 Parâmetro desconhecido
|Autor=
ignorado (|autor=
) sugerido (ajuda); Parâmetro desconhecido|Volumes=
ignorado (|volume=
) sugerido (ajuda); Parâmetro desconhecido|Volume=
ignorado (|volume=
) sugerido (ajuda); Parâmetro desconhecido|Páginas=
ignorado (|páginas=
) sugerido (ajuda) - DALL'OGLIO, Pablo (2007). PHP Programando com Orientação a Objetos. Inclui Design Patterns 1 ed. [S.l.]: Novatec. ISBN 978-85-7522-137-2 Parâmetro desconhecido
|Autor=
ignorado (|autor=
) sugerido (ajuda); Parâmetro desconhecido|Páginas=
ignorado (|páginas=
) sugerido (ajuda); Ligação externa em|Título=
(ajuda) - DALL'OGLIO, Pablo (2007). PHP-GTK Criando Aplicações Gráficas com PHP 2 ed. [S.l.]: Novatec. ISBN 978-85-7522-110-5 Parâmetro desconhecido
|Autor=
ignorado (|autor=
) sugerido (ajuda); Parâmetro desconhecido|Páginas=
ignorado (|páginas=
) sugerido (ajuda); Ligação externa em|Título=
(ajuda) - MELO, Alexandre Altair de; NASCIMENTO, Mauricio G. F (2007). PHP Profissional. Aprenda a desenvolver sistemas profissionais orientados a objetos com padrões de projeto 1 ed. [S.l.]: Novatec. ISBN 978-85-7522-141-9 Parâmetro desconhecido
|Autor=
ignorado (|autor=
) sugerido (ajuda); Parâmetro desconhecido|Páginas=
ignorado (|páginas=
) sugerido (ajuda); Ligação externa em|Título=
(ajuda)
Ligações externas
- «Sítio oficial» (em inglês)
- Predefinição:Dmoz