PHP - PHP

Da Wikipédia, a enciclopédia livre

PHP
PHP-logo.svg
Paradigma Imperativo , funcional , -orientada por objectos , processual , reflexivo
Projetado por Rasmus Lerdorf
Desenvolvedor Os PHP equipe de desenvolvimento, Zend Technologies
Apareceu pela primeira vez 1995 ; 23 anos atrás ( 1995 )
Versão estável
7.2.12 / 8 de novembro de 2018 ; 29 dias atrás ( 2018/11/08 )
Release Preview
7.3.0RC6 / 22 de novembro de 2018 ; 15 dias atrás ( 2018/11/22 )
disciplina Typing Dinâmico , fraco

desde a versão 7.0:

Gradual
linguagem de implementação C (principalmente, alguns componentes C ++ )
OS Unix-like , o Windows
Licença PHP License (mais de Zend engine debaixo do motor Licença Zend )
extensões de arquivo .php, .phtml, .php3, .php4, .php5, .php7, .phps, .phps, .pht
Local na rede Internet garantir .php .net
grandes implementações
Zend Engine , HHVM , Phalanger , Quercus , Parrot
Influenciado por
Perl , C , C ++ , Java , Tcl
Influenciado
picareta

PHP: Hypertext Preprocessor (ou simplesmente PHP ) é um script do lado do servidor linguagem projetada para desenvolvimento Web , e também usado como uma linguagem de programação de propósito geral . Ele foi originalmente criado por Rasmus Lerdorf em 1994; o PHP implementação de referência é agora produzido pelo grupo PHP. PHP originalmente significava Personal Home página , mas agora representa o recursiva initialism PHP: Hypertext Preprocessor .

Código PHP pode ser embutido em HTML código, ou ele pode ser usado em combinação com vários sistemas modelo web , sistemas de gerenciamento de conteúdo web e frameworks web . Código PHP geralmente é processado por um PHP intérprete implementado como um módulo no servidor web ou como um Common Gateway Interface executável (CGI). O servidor web combina os resultados do código interpretado e executado PHP, que pode ser qualquer tipo de dados, incluindo imagens, com a página da web gerado. Código PHP também pode ser executado com uma interface de linha de comando (CLI) e pode ser usado para implementar autônomos aplicações gráficas .

O intérprete PHP padrão, alimentado pelo Zend Engine , é um software livre liberado sob a licença PHP . PHP tem sido amplamente portado e pode ser implantado na maioria dos servidores web em quase todos os sistema operacional e plataforma , gratuitamente.

A linguagem PHP evoluiu sem uma escrita especificação formal ou padrão até 2014, com a atuação implementação original como o de facto padrão que outras implementações destinado a seguir. Desde 2014 trabalho passou a criar uma especificação formal PHP.

História

História antiga

Rasmus Lerdorf , que escreveu o original Common Gateway Interface componente (CGI), juntamente com Andi Gutmans e Zeev Suraski , que reescreveu o analisador que formou PHP 3.

PHP desenvolvimento começou em 1994, quando Rasmus Lerdorf escreveu vários Common Gateway Interface programas (CGI) em C, que ele usou para manter sua homepage pessoal . Ele estendeu-los a trabalhar com formulários web e para se comunicar com bancos de dados , e chamou essa implementação "Personal Home Page / Formulários Interpreter" ou PHP / FI.

PHP / FI pode ser usado para construir simples e dinâmicas aplicações web . Para acelerar bug relatórios e melhorar o código, Lerdorf inicialmente anunciado o lançamento do PHP / FI como "Personal Home Page Tools (Ferramentas PHP) Versão 1.0" na Usenet discussão em grupo comp.infosystems.www.authoring.cgi em 08 de junho de 1995 . Esta versão já tinha a funcionalidade básica que o PHP tem hoje. Isto incluiu variáveis Perl-como , manipulação de forma, e a capacidade de incorporar HTML. A sintaxe se assemelhava a do Perl, mas era mais simples, mais limitado e menos consistente.

PHP cedo não se destinava a ser uma nova linguagem de programação, e cresceu organicamente, com Lerdorf observando em retrospectiva: "Eu não sei como pará-lo, nunca houve qualquer intenção de escrever uma linguagem de programação [...] Eu tenho absolutamente nenhuma idéia de como escrever uma linguagem de programação, eu continuei adicionando o próximo passo lógico no caminho." A equipe de desenvolvimento começou a se formar e, depois de meses de trabalho e beta testes, lançado oficialmente PHP / FI 2 em Novembro de 1997.

O fato de que o PHP não foi originalmente concebido, mas em vez disso foi desenvolvido organicamente levou a nomeação inconsistente de funções e ordenação inconsistente de seus parâmetros. Em alguns casos, os nomes das funções foram escolhidos para combinar com as bibliotecas de nível inferior que o PHP foi "embrulho", enquanto que em algumas versões muito cedo de PHP o comprimento dos nomes de função foi usado internamente como uma função hash , então nomes foram escolhidos para melhorar a distribuição de valores de hash.

PHP 3 e 4

Este é um exemplo de código PHP personalizado para o CMS WordPress .

Zeev Suraski e Andi Gutmans reescreveu o analisador em 1997 e formou a base do PHP 3, mudando o nome da linguagem para a recursiva sigla PHP: Hypertext Preprocessor . Depois, testes públicos de PHP 3 começou, e o lançamento oficial ocorreu em junho de 1998. Suraski e Gutmans em seguida, começou um novo reescrita do núcleo do PHP, produzindo o Zend Engine , em 1999. Eles também fundou Zend Technologies em Ramat Gan , Israel.

Em 22 de maio de 2000, PHP 4, alimentado pelo Zend Engine 1.0, foi lançado. Em agosto de 2008, este ramo chegou a versão 4.4.9. PHP 4 não é mais em desenvolvimento nem nenhuma atualização de segurança ser liberado.

PHP 5

Em 14 de julho de 2004, PHP 5 foi lançado, alimentado pela nova Zend Engine II. PHP 5 inclui novos recursos, como suporte melhorado para programação orientada a objetos , os PHP Data Objects (PDO) de extensão (que define uma interface leve e consistente para acessar bancos de dados), e inúmeras melhorias de desempenho. Em 2008 PHP 5 tornou-se a única versão estável em desenvolvimento. Estática ligação tardia tinha sido falta de PHP e foi adicionado na versão 5.3.

Muitos projetos open-source de alto nível deixou de apoiar PHP 4 no novo código a partir de 5 de fevereiro de 2008, por causa da iniciativa GoPHP5, fornecido por um consórcio de desenvolvedores PHP promovendo a transição do PHP 4 para o PHP 5.

Ao longo do tempo, os intérpretes de PHP tornou-se disponível na maioria dos existentes de 32 bits e de 64 bits sistemas operacionais, quer por construí-los a partir do código-fonte PHP, ou usando os binários pré-construídos. Para as versões do PHP 5.3 e 5.4, as únicas disponíveis Microsoft Windows distribuições binárias foram 32-bit x86 constrói, exigindo modo de compatibilidade do Windows 32-bit enquanto estiver usando o Internet Information Services (IIS) em uma plataforma Windows de 64 bits. PHP versão 5.5 fez o 64-bit x86-64 constrói disponível para Microsoft Windows.

Apoio oficial de segurança para PHP 5.6 irá terminar em 31 de dezembro de 2018, mas Debian 8.0 Jessie estender o suporte até junho 2020.

PHP 6 e Unicode

PHP recebeu críticas mistas devido à falta nativo Unicode apoio no nível da linguagem núcleo. Em 2005, um projeto liderado por Andrei Zmievski foi iniciada para trazer suporte a Unicode nativa em todo PHP, incorporando o International Components for Unicode (UTI) biblioteca, e representando cadeias de texto como UTF-16 internamente. Uma vez que este poderia causar grandes alterações tanto para os internos da linguagem e código de utilizador, que foi planejado para liberar este como versão 6.0 da linguagem, juntamente com outros recursos importantes, em seguida, em desenvolvimento.

No entanto, a falta de desenvolvedores que compreendeu as mudanças necessárias, e problemas de desempenho decorrentes de conversão de e para UTF-16, que raramente é usado em um contexto web, levou a atrasos no projeto. Como resultado, uma versão PHP 5.3 foi criado em 2009, com muitos não-Unicode recursos back-portados de PHP 6, nomeadamente namespaces. Em Março de 2010, o projecto na sua forma actual foi oficialmente abandonado, e uma libertação PHP 5.4 foi preparado contendo a maior parte restante não-Unicode características do PHP 6, tais como traços de fecho e de ligao ao re. esperanças iniciais eram de que um novo plano seria formado para a integração Unicode, mas a partir de 2014 nenhum tinha sido adotada.

PHP 7

Durante 2014 e 2015, uma nova versão principal PHP foi desenvolvido, o que foi contado PHP 7. A numeração desta versão envolvido algum debate. Enquanto o experimento PHP 6 Unicode nunca tinha sido lançado, vários artigos e títulos de livros referenciado o nome PHP 6, o que pode ter causado confusão se uma nova versão foram reutilizar o nome. Após a votação, o nome PHP 7 foi escolhido.

A fundação do PHP é um PHP ramo que foi originalmente apelidado PHP próxima geração ( phpng ). Ele foi escrito por Dmitry Stogov, Xinchen Hui e Nikita Popov, e teve como objetivo otimizar o desempenho do PHP por refatoração do Zend Engine, mantendo compatibilidade linguagem quase completa. Como de 14 de Julho de 2014, WordPress baseados em benchmarks, que serviu como o principal pacote de benchmark para o projeto phpng, mostrou um aumento de quase 100% no desempenho. Também são esperadas mudanças de phpng para tornar mais fácil para melhorar o desempenho no futuro, como mais compacto estruturas de dados e outras mudanças são vistas como mais adequado para uma migração bem-sucedida para um just-in-time (JIT). Por causa das mudanças significativas, a Zend Engine reformulado é chamado Zend Engine 3 , sucedendo Zend Engine 2 usado em PHP 5.

Devido a grandes mudanças internas em phpng, ele deve receber uma nova versão principal número de PHP, ao invés de uma versão secundária PHP 5, de acordo com processo de liberação de PHP. Versões principais de PHP estão autorizados a quebrar compatibilidade com versões anteriores do código e, portanto, PHP 7 apresentaram uma oportunidade para outras melhorias além phpng que exigem pausas-compatibilidade com versões anteriores. Em particular, envolveu as seguintes alterações:

  • Muitos mecanismos de erro fatal- ou de nível recuperável PHP legado foram substituídas por modernas orientadas a objetos exceções
  • A sintaxe para dereferencing variável foi reformulado para ser internamente mais consistente e completa, permitindo o uso dos operadores -> , [] , () , {} , e :: com expressões mão do lado esquerdo significativas arbitrárias
  • O suporte para legacy PHP métodos construtores 4 de estilo foi depreciado
  • O comportamento do foreach declaração foi alterado para ser mais previsível
  • Construtores para as poucas classes internas para PHP que retornou nulo em caso de falha foram alteradas para lançar uma exceção em vez disso, para a consistência
  • Vários sem manutenção ou obsoletas interfaces de programação de aplicativo de servidor (SAPIs) e extensões foram retirados do núcleo do PHP, mais notavelmente o legado mysql extensão
  • O comportamento da lista () operador foi alterado para remover o suporte para strings
  • O suporte para legacy estilo ASP delimitadores de código PHP ( <% e %> , <script language = php> e </ script> ) foi removido
  • Um descuido que permite uma instrução switch para ter várias padrão cláusulas foi fixado
  • Suporte para apoio número hexadecimal em algumas conversões implícitas de strings para tipos de número foi removido
  • Os Shift esquerda e shift direita operadores foram alterados para se comportar de forma mais consistente em todas as plataformas
  • As conversões entre números inteiros e números de ponto flutuante foram apertados e implementadas de forma mais consistente em todas as plataformas

PHP 7 também inclui novos recursos de linguagem. Mais notavelmente, ele apresenta declarações de tipo de retorno para as funções que complementam as declarações de tipo parâmetro existentes e suporte para os escalares tipos (integer, float, string e booleanos) no parâmetro e retornar declarações de tipo.

histórico de lançamento

Versão Data de lançamento suportado até Notas
versão antiga, não mais suportada: 1.0 8 junho de 1995 Oficialmente chamado de "Personal Home Page Tools (Ferramentas PHP)". Este é o primeiro uso do nome "PHP".
versão antiga, não mais suportada: 2,0 01 de novembro de 1997 Oficialmente chamado "PHP / FI 2.0". Este é o primeiro lançamento que poderia realmente ser caracterizado como PHP, sendo uma linguagem independente com muitas características que resistiram até os dias atuais.
versão antiga, não mais suportada: 3,0 06 junho de 1998 20 de outubro de 2000 Desenvolvimento move de uma pessoa para vários desenvolvedores. Zeev Suraski e Andi Gutmans reescrever a base para esta versão.
versão antiga, não mais suportada: 4.0 22 de maio de 2000 23 de junho de 2001 Adicionado mais avançado de duas fases de análise / executar sistema de análise de tag chamado de motor de Zend.
versão antiga, não mais suportada: 4.1 10 de dezembro de 2001 12 mar 2002 Introduzidas "superglobals" ( $_GET, $_POST, $_SESSION, etc.)
versão antiga, não mais suportada: 4,2 22 de abril de 2002 06 de setembro de 2002 Desativada register_globalspor padrão. Os dados recebidos através da rede não está inserido diretamente no mundial namespace mais, fechar possíveis falhas de segurança em aplicações.
versão antiga, não mais suportada: 4.3 27 de dezembro de 2002 31 de março de 2005 Introduziu a interface de linha de comando (CLI), para complementar o CGI.
versão antiga, não mais suportada: 4,4 11 julho de 2005 07 de agosto de 2008 Corrigido um erro de corrupção de memória, o que exigiu quebrar a compatibilidade binária com extensões compiladas contra o PHP versão 4.3.x.
versão antiga, não mais suportada: 5 13 julho de 2004 05 de setembro de 2005 Zend Engine II com um novo modelo de objeto.
versão antiga, não mais suportada: 5.1 24 de novembro de 2005 24 de agosto de 2006 melhorias de desempenho com a introdução de variáveis ​​do compilador em re-engenharia Motor PHP. Adicionado PHP Data Objects (PDO) como uma interface consistente para acessar bancos de dados.
versão antiga, não mais suportada: 5.2 02 de novembro de 2006 06 janeiro de 2011 Habilitado a extensão filtro por padrão. Nativo JSON apoio.
versão antiga, não mais suportada: 5,3 30 de junho de 2009 14 ago 2014 Namespace de apoio; final de ligações estáticas , saltar label (limitado Goto ), fechamentos , arquivos PHP (phar), coleta de lixo para referências circulares, melhorou o Windows apoio, sqlite3, mysqlnd como um substituto para libmysql como biblioteca subjacente para as extensões que funcionam com o MySQL , fileinfo como um substituto para mime_magic para melhor MIME apoio, a extensão Internacionalização e depreciação de extensão ereg.
versão antiga, não mais suportada: 5,4 01 de março de 2012 03 de setembro de 2015 Trait apoio, apoio sintaxe curta matriz. Itens removidos: register_globals, safe_mode, allow_call_time_pass_reference, , e . Built-in servidor web. Várias melhorias nos recursos existentes, o desempenho e os requisitos de memória reduzidos. session_register()session_unregister()session_is_registered()
versão antiga, não mais suportada: 5.5 20 de junho de 2013 10 de julho de 2016 Suporte para geradores , finallyblocos para tratamento de exceções, OpCache (baseado em Zend Optimizer +) fornecido na distribuição oficial.
versão mais antiga, mas ainda suportados: 5.6 28 de agosto de 2014 31 dez 2018 Expressões constantes escalares, funções variádicos , descompactação argumento, novo operador de exponenciação, extensões do uso declaração de funções e constantes, nova phpdbg depurador como um módulo SAPI e outras melhorias menores.
6.x não tem autorização N / D versão do PHP que planejada para incluir suporte a Unicode nativo abandonado.
versão antiga, não mais suportada: 7 03 de dezembro de 2015 03 de dezembro de 2018 Zend Engine 3 (melhorias de desempenho e apoio inteiro de 64-bit no Windows), sintaxe variável uniforme, AST baseados processo de compilação, adicionado , bit a bit consistência deslocamento em todas as plataformas, ( COALESCE nulo ) do operador, Unicode ponto de código de sintaxe de escape , as declarações de tipo de retorno, tipo escalar (integer, float, string e booleano) declarações, "nave espacial" comparação de três vias operador, gerador de delegação, classes anônimas , mais simples e mais consistentemente disponíveis CSPRNG API, substituição de muitos "erros" restantes PHP interna com os mais modernos exceções e sintaxe abreviada para a importação de vários itens de um namespace.Closure::call()??<=>
versão mais antiga, mas ainda suportados: 7.1 1 dez 2016 1 de dezembro de 2019 Tipo de retorno void , constante de classe modificadores de visibilidade
versão mais antiga, mas ainda suportados: 7,2 30 de novembro de 2017 30 de novembro de 2020 parâmetro de objeto e tipo de retorno dica, extensão Libsodium, método de substituição Abstract, tipo de parâmetro alargamento
versão estável atual: 7.3 6 de dezembro de 2018 06 de dezembro de 2021 Flexível Heredoc e sintaxe nowdoc, suporte para referências e desconstrução conjunto com list (), o apoio PCRE2, hrtime () função
Lenda:
Versão antiga
versão mais antiga, ainda suportada
Última versão
versão mais recente pré-visualização
versão futura

Começando em 28 de Junho de 2011, a equipe de desenvolvimento PHP implementado um cronograma para o lançamento de novas versões do PHP. Sob este sistema, pelo menos um lançamento deve ocorrer a cada mês. Uma vez por ano, uma versão secundária deverá ocorrer o que pode incluir novos recursos. Cada liberação menor deve pelo menos ser apoiada por dois anos com correções de segurança e bugs, seguido por pelo menos um ano de apenas correções de segurança, para um total de um processo de liberação de três anos para cada versão menor. Não há novas funcionalidades, a menos que pequenos e auto-suficiente, estão a ser introduzidos em uma versão secundária durante o processo de liberação de três anos.

Mascote

O mascote elePHPant, PHP.

O mascote do projecto é a de PHP elePHPant , um azul elefante com o logotipo PHP no seu lado, concebido por Vincent Pontier em 1998. "Os (PHP) foram letras que formam a forma de um elefante se viram em um ângulo para o lado." O elePHPant às vezes é de cor diferente quando em brinquedo de pelúcia forma.

Muitas variações deste mascote foram feitas ao longo dos anos. Apenas os elePHPants com base no projeto original por Vincent Pontier são considerados oficiais pela comunidade. Estes são altamente colecionáveis e alguns deles são extremamente raros. Diferentes variações estão listados no Guia de Campo para Elephpants .

Sintaxe

O seguinte "Olá, mundo!" programa é escrito em código PHP incorporado em um HTML documento:

<!DOCTYPE html>
<html>
 <head>
 <title>PHP Test</title>
 </head>
 <body>
 <?php echo '<p>Hello World</p>'; ?>
 </body>
</html>

No entanto, como existe nenhuma exigência para o código PHP para ser incorporado em HTML, a versão mais simples Olá, mundo! pode ser escrita como este, com a marca de fechamento omitido como preferidos em ficheiros que contêm códigos PHP puro

 <?='Hello world';

O intérprete PHP executa somente código PHP dentro de seus delimitadores . Qualquer coisa fora seus delimitadores não é processado por PHP, embora o texto não-PHP ainda está sujeita a controlar estruturas descritas no código PHP. Os delimitadores mais comuns são <? Php para abrir e ?> Para fechar seções PHP. A forma abreviada <? também existe. Esta curta delimitador faz arquivos de script menos portátil, uma vez que o apoio para eles pode ser desativado na configuração do PHP local e, portanto, é desencorajado. No entanto, não há nenhuma recomendação contra o uso do short tag echo <? = . Antes do PHP 5.4.0, esta curta sintaxe para echo () só funciona com o short_open_tag configuração ativada, enquanto que para PHP 5.4.0 e mais tarde é sempre disponível. O objetivo de todos esses delimitadores é separar o código PHP a partir do conteúdo não-PHP, tais como JavaScript código ou marcação HTML.

A primeira forma de delimitadores, <? Php e ?> , Em XHTML e outros XML de processamento de XML documentos, cria formado corretamente as instruções. Isto significa que a mistura resultante de código PHP e outra marcação no arquivo do lado do servidor é o próprio XML bem formado.

As variáveis são prefixados com um símbolo do dólar , e um tipo não precisa ser especificado com antecedência. PHP 5 introduzido indicação de tipo que permite que as funções para forçar os seus parâmetros para ser objectos de uma classe específica, matrizes, interfaces ou funções de chamada de retorno . No entanto, antes do PHP 7.0, dicas de tipo não poderia ser utilizado com tipos, tais como escalares inteiro ou corda.

Ao contrário de nomes de função e de classe, nomes de variáveis são case sensitive. Ambos com aspas duplas ( "") e heredoc cordas fornecer a capacidade de interpolar o valor de uma variável na seqüência. PHP trata novas linhas como espaço em branco na forma de uma linguagem de forma livre , e as declarações são terminadas por um ponto e vírgula. PHP tem três tipos de sintaxe de comentário : /* */marcas bloco e comentários incorporados; //ou #são usados para comentários de uma linha. A echodeclaração é uma das várias instalações PHP fornece ao texto de saída, por exemplo , para um navegador web.

Em termos de palavras-chave e sintaxe da linguagem, PHP é semelhante à sintaxe estilo C. Se as condições, para e enquanto loops, e função retorna são similares em sintaxe para linguagens como C, C ++, C #, Java e Perl.

Tipos de dados

Armazena PHP inteiros em um intervalo dependente da plataforma, tanto um de 64 bits ou de 32 bits assinado número inteiro equivalente ao longo tipo da linguagem C . Inteiros sem sinal são convertidos em valores assinados em determinadas situações; este comportamento é diferente de outras linguagens de programação. Variáveis inteiras podem ser atribuídas usando decimal (positivo e negativo), octal , hexadecimal e binário notações.

Ponto flutuante números também são armazenados em uma gama específica da plataforma. Eles podem ser especificados usando a notação de ponto flutuante, ou duas formas de notação científica . PHP tem um nativa booleana tipo que é semelhante aos tipos booleanos nativas em Java e C ++ . Usando as regras de conversão tipo boolean, valores diferentes de zero são interpretados como verdadeiro e zero como falsa, como em Perl e C ++.

O tipo de dados nula representa uma variável que não tem nenhum valor; NULLé o valor só é permitido para este tipo de dados.

Variáveis ​​do tipo "recurso" representam referências a recursos de fontes externas. Estes são tipicamente criado por funções de uma determinada extensão, e só podem ser processados ​​por funções da mesma extensão; exemplos incluem arquivo, imagem e recursos de banco de dados.

Arrays podem conter elementos de qualquer tipo que o PHP pode manipular, incluindo recursos, objetos e até mesmo outras matrizes. Ordem é preservada em listas de valores e em hashes com chaves e valores, e os dois podem ser misturados. PHP também suporta cordas , que podem ser usados com aspas simples, aspas duplas, nowdoc ou heredoc sintaxe.

O Standard PHP Library (SPL) tenta resolver problemas padrão e implementa interfaces e classes eficientes de acesso de dados.

Funções

PHP define uma grande variedade de funções no idioma núcleo e muitos estão também disponíveis em várias extensões; estas funções estão bem documentados na documentação do PHP online. No entanto, o built-in biblioteca tem uma grande variedade de convenções de nomenclatura e inconsistências associadas, conforme descrito em história acima.

As funções personalizadas podem ser definidos pelo desenvolvedor, por exemplo:

// define a function, this one is named "myAge"
function myAge(Int $birthYear) : String {

 // calculate the age
 $yearsOld = date('Y') - $birthYear;

 // return the age in a descriptive form
 return $yearsOld . ' year' . ($yearsOld != 1 ? 's' : '');
}

// Next, output the text concatenated
// with the return value of myAge()
// As the result of the syntax "myAge()", the myAge function is called.
echo 'I am currently ' . myAge(1995) . ' old.';

Em 2018, a saída do programa de exemplo acima é 'Eu estou atualmente 23 anos.'

Em vez de ponteiros de função , funções em PHP pode ser referenciado por uma string contendo o seu nome. Desta maneira, as funções normais PHP pode ser utilizado, por exemplo, como chamadas de retorno ou dentro de tabelas de função . Funções definidas pelo usuário podem ser criadas em qualquer momento, sem ser um protótipo . As funções podem ser definidas dentro de blocos de código, permitindo uma decisão de tempo de execução quanto à existência ou não uma função deve ser definido. Há uma function_existsfunção que determina se uma função com um determinado nome já foi definido. Chamadas de função deve usar parênteses, com excepção da classe sem argumentos do construtor funções chamadas com o operador PHP novo , em que parênteses casos são opcionais.

Até PHP 5.3, suporte para funções anônimas e fechamentos não existia no PHP. Enquanto create_function()existe desde PHP 4.0.1, é simplesmente um invólucro fino em torno eval()que permite funções normais PHP a serem criados durante a execução do programa. PHP 5.3 adicionado sintaxe para definir uma função anónima ou "fecho", que podem captar variáveis do âmbito circundante:

function getAdder($x) {
 return function($y) use ($x) {
 return $x + $y;
 };
}

$adder = getAdder(8);
echo $adder(2); // prints "10"

No exemplo acima, getAdder()a função cria um fecho usando argumento passado $x(a palavra-chave useimporta uma variável a partir do contexto léxico), que leva um argumento suplementar $y, e retorna o fecho criado para o chamador. Tal função é um objecto de primeira classe, o que significa que ele pode ser armazenado em uma variável, transmitidos como um parâmetro para outras funções, etc.

Excepcionalmente para uma linguagem de tipagem dinâmica, PHP suporta declarações de tipo nos parâmetros de função, que são aplicadas em tempo de execução. Isto foi suportado por classes e interfaces desde o PHP 5.0, para matrizes desde o PHP 5.1, para "chamáveis" desde o PHP 5.4, e escalar (inteiro, ponto flutuante, corda e booleano) tipos desde o PHP 7.0. PHP 7.0 também tem tipo declarações dos tipos de função de retorno, expressos, colocando o nome do tipo depois da lista de parâmetros, precedido por dois pontos. Por exemplo, a getAdderfunção a partir do exemplo anterior poderia ser anotada com tipos como assim no PHP 7:

function getAdder(int $x): \Closure {
 return function(int $y) use ($x) : int {
 return $x + $y;
 };
}

$adder = getAdder(8);
echo $adder(2); // prints "10"
echo $adder(null); // throws an exception because an incorrect type was passed
$adder = getAdder([]); // would also throw an exception

Por padrão, declarações tipo escalar seguir os princípios de digitação fracos. Assim, por exemplo, se o tipo de um parâmetro é int, PHP permitiria não apenas números inteiros, mas também cadeias numéricas conversíveis, carros alegóricos ou booleans a serem passados para essa função, e que convertê-los. No entanto, PHP 7 tem um modo "strict digitando" que, quando utilizado, não permite tais conversões para chamadas de função e retorna dentro de um arquivo.

PHP Objects

Básico de programação orientada a objetos funcionalidade foi adicionada no PHP 3 e melhorou em PHP 4. Isto permitiu PHP para ganhar ainda mais abstração, tornando as tarefas criativas mais fácil para programadores que usam a linguagem. Manipulação de objeto foi totalmente reescrito para PHP 5, ampliando o conjunto de recursos e melhorar o desempenho. Nas versões anteriores do PHP, objetos foram tratados como tipos de valor . A desvantagem deste método é que o código tinha que fazem uso pesado de variáveis de "referência" do PHP se quisesse modificar um objeto foi passado ao invés de criar uma cópia do mesmo. Na nova abordagem, os objetos são referenciados pelo punho , e não por valor.

PHP 5 introduziu privadas e protegidas variáveis de membro e métodos, juntamente com classes abstratas , classes final , métodos abstratos e métodos final . É também introduzida uma maneira padrão de declarar construtores e destruidores , semelhante à de outras línguas orientada para objectos tais como C ++ , e um padrão de manipulação de exceção modelo. Além disso, o PHP 5 adicionados de interfaces e permitido para várias interfaces para ser implementado. Há interfaces especiais que permitem que objetos para interagir com o sistema de execução. Objectos de execução ArrayAccess pode ser usada com matriz de sintaxe e objectos de aplicação Repetidor ou IteratorAggregate pode ser utilizado com a foreach construção de linguagem . Não há tabela virtual recurso no motor, então variáveis estáticas são obrigados com um nome em vez de uma referência em tempo de compilação.

Se o desenvolvedor cria uma cópia de um objeto usando a palavra reservada clone, o motor Zend irá verificar se um __clone()método foi definido. Se não, ele vai chamar um padrão __clone()que irá copiar as propriedades do objeto. Se um __clone()método está definida, então será responsável pela definição das propriedades necessárias no objecto criado. Para maior comodidade, o motor irá fornecer uma função que importa as propriedades do objeto de origem, para que o programador pode começar com um por valor réplica do objeto de origem e só substituir as propriedades que precisam ser alterados.

O seguinte é um exemplo de base de programação orientada para o objecto em PHP:

class Person
{
   public $firstName;
   public $lastName;

   public function __construct($firstName, $lastName = '') { // optional second argument
     $this->firstName = $firstName;
     $this->lastName = $lastName;
   }

   public function greet() {
     return 'Hello, my name is ' . $this->firstName .
       (($this->lastName != '') ? (' ' . $this->lastName) : '') . '.';
   }

   public static function staticGreet($firstName, $lastName) {
     return 'Hello, my name is ' . $firstName . ' ' . $lastName . '.';
   }
}

$he = new Person('John', 'Smith');
$she = new Person('Sally', 'Davis');
$other = new Person('iAmine');

echo $he->greet(); // prints "Hello, my name is John Smith."
echo '<br />';

echo $she->greet(); // prints "Hello, my name is Sally Davis."
echo '<br />';

echo $other->greet(); // prints "Hello, my name is iAmine."
echo '<br />';

echo Person::staticGreet('Jane', 'Doe'); // prints "Hello, my name is Jane Doe."

A visibilidade de propriedades PHP e métodos é definida de acordo com as palavras-chave public , privatee protected. O padrão é público, se apenas var é usado; varé um sinônimo para public. Itens declarados publicpodem ser acessados em todos os lugares. protectedlimita o acesso a classes herdadas (e para a classe que define o item). privatelimita a visibilidade apenas para a classe que define o item. Objetos do mesmo tipo têm acesso a cada um dos outros membros privados e protegidos, mesmo que eles não são a mesma instância.

implementações

A implementação PHP original, só se completa e mais amplamente utilizado é alimentado pelo Zend Engine e conhecido simplesmente como PHP. Para distingui-la de outras implementações, às vezes é oficialmente chamado de "Zend PHP". A Zend Engine compila PHP código fonte on-the-fly em um formato interno que pode executar, assim, ele funciona como um intérprete . É também a "implementação de referência" do PHP, como PHP tem nenhuma especificação formal, e assim a semântica do Zend PHP definir a semântica do PHP. Devido às semântica complexa e matizada de PHP, definidas pela forma como Zend trabalha, é difícil para implementações competindo para oferecer compatibilidade completa.

Do PHP single-request-per-script-execução do modelo, eo fato do Zend Engine é um intérprete, leva à ineficiência; Como resultado, vários produtos foram desenvolvidos para ajudar a melhorar o desempenho PHP. A fim de acelerar o tempo de execução e não precisa compilar o código fonte PHP cada vez que a página web é acessada, scripts PHP também pode ser implantado em formato interno do motor de PHP usando um opcode cache, que funciona através da cache a forma compilada de um script PHP (opcodes) em memória compartilhada para evitar a sobrecarga de analisar e compilar o código de cada vez que o script é executado. Um cache opcode, Zend Opcache , é construído em PHP desde a versão 5.5. Outro exemplo de um cache amplamente utilizado é o PHP alternativa cache (APC), que está disponível como um PECL extensão.

Enquanto Zend PHP ainda é a aplicação mais popular, várias outras implementações têm sido desenvolvidos. Alguns destes são compiladores ou suporte compilação JIT , e, portanto, oferecer benefícios de desempenho mais Zend PHP à custa de falta de compatibilidade PHP completo. Implementações alternativas incluem o seguinte:

  • HHVM (HipHop Virtual Machine) - desenvolvido pelo Facebook e disponível como código aberto, ele converte código PHP em um bytecode de alto nível (vulgarmente conhecida como uma linguagem intermediária ), que é então traduzido em código de máquina x86-64 dinamicamente em tempo de execução por um just-in-time (JIT), resultando em até 6 × melhorias de desempenho.
  • Parrot  - uma máquina virtual projetada para executar linguagens dinâmicas com eficiência; Pipp transforma o código de fonte do PHP na representação intermédia papagaio , o qual é então traduzido em código de bytes do papagaio e executado pela máquina virtual.
  • Phalanger  - compila o PHP a Common Intermediate Language (CIL) bytecode
  • Quercus  - compila PHP em bytecode Java
  • HipHop  - desenvolvido pelo Facebook e disponível como código aberto, ele transforma os scripts PHP em C ++ de código e, em seguida, compila o código resultante, reduzindo a carga do servidor em até 50%. No início de 2013, Facebook preterido em favor de HHVM devido a várias razões, incluindo dificuldades de implementação e falta de apoio para toda a linguagem PHP, incluindo o create_function () e () eval construções.

licenciamento

PHP é software livre liberado sob a licença PHP , que estipula que:

Os produtos derivados deste software não podem ser chamados "PHP", nem pode "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 PHP dizendo " Foo for PHP" em vez de chamá-lo "PHP Foo" ou "phpfoo".

Esta restrição sobre o uso de "PHP" faz com que a licença PHP incompatível com a Licença Pública Geral (GPL), enquanto a Licença Zend é incompatível devido a uma cláusula de publicidade semelhante ao do original licença BSD .

Desenvolvimento e comunidade

PHP inclui várias bibliotecas livres e de código aberto em sua distribuição fonte, ou usa-los em resultando PHP binário constrói. PHP é fundamentalmente um Internet sistema -aware com módulos embutidos para acessar File Transfer Protocol (FTP) e muitos servidores de banco de dados, incluindo PostgreSQL , MySQL , Microsoft SQL Server e SQLite (que é um banco de dados integrado), LDAP servidores, e outros . Numerosas funções familiares aos programadores de C, tais como aqueles na stdio família, estão disponíveis em PHP padrão constrói.

PHP permite aos desenvolvedores escrever extensões em C para adicionar funcionalidade para a linguagem PHP. Extensões PHP pode ser compilado estaticamente com o PHP ou carregada dinamicamente em tempo de execução. Várias extensões foram escritos para adicionar suporte para a API do Windows , gestão de processos em Unix-like sistemas operacionais , cordas de vários bytes ( Unicode ), cURL , e vários populares formatos de compressão . Outras características PHP disponibilizados através de extensões incluem a integração com IRC , geração dinâmica de imagens e Adobe Flash conteúdo, PHP Data Objects (PDO) como uma camada de abstração usado para acessar bancos de dados, e até mesmo de síntese de voz . Algumas das funções essenciais da linguagem, tais como aqueles que lidam com cordas e matrizes, também são implementadas como extensões. O PHP Extensão Biblioteca Comunitária projeto (PECL) é um repositório de extensões para a linguagem PHP.

Alguns outros projetos, como Zephir , fornecem a capacidade para extensões de PHP para ser criado em uma linguagem de alto nível e compilados em extensões nativas do PHP. Uma tal abordagem, em vez de escrever extensões PHP directamente em C, simplifica o desenvolvimento de extensões e reduz o tempo necessário para a programação e de teste.

O Grupo PHP consiste de dez pessoas (a partir de 2015): Thies C. Arntzen , Stig Bakken , Shane Caraveo , Andi Gutmans , Rasmus Lerdorf , Sam Ruby , Sascha Schumann , Zeev Suraski , Jim Winstead , Andrei Zmievski .

Zend Technologies fornece uma Certificação PHP baseado em PHP 5.5 exame para programadores para se tornar desenvolvedores PHP certificados.

Instalação e configuração

Há duas maneiras principais para adicionar suporte para o PHP para um servidor web - como um módulo de servidor web nativa, ou como um executável CGI. PHP tem um módulo de interface direta chamado Server Application Programming Interface de (SAPI), que é apoiado por muitos servidores web, incluindo Apache HTTP Server , Microsoft IIS , Netscape (agora extinto) e iPlanet . Alguns outros servidores web, como OmniHTTPd, apoiar o Application Programming Interface Internet Server (ISAPI), que é um Microsoft interface do módulo de servidor web 's. Se o PHP não tem suporte módulo para um servidor web, ele sempre pode ser usado como um Common Gateway Interface (CGI) ou FastCGI processador; nesse caso, o servidor web está configurado para usar executável CGI do PHP para processar todas as solicitações para arquivos PHP.

PHP-FPM (FastCGI Process Manager) é uma implementação FastCGI alternativa para PHP, junto com a distribuição oficial PHP desde a versão 5.3.3. Quando comparado com a implementação FastCGI mais velho, ele contém algumas características adicionais, principalmente úteis para servidores web muito carregado.

Ao usar o PHP para linha de comando de script, um PHP interface de linha de comando é necessária (CLI) executável. PHP suporta uma SAPI CLI a partir do PHP 4.3.0. O foco principal deste SAPI está desenvolvendo shell aplicações utilizando PHP. Existem algumas diferenças entre o CLI SAPI e outras SAPIs, embora eles compartilham muitos dos mesmos comportamentos.

PHP tem um módulo de interface direta chamado SAPI para diferentes servidores web; em caso de PHP 5 e Apache 2.0 no Windows, ele é fornecido na forma de uma DLL arquivo chamado php5apache2.dll , que é um módulo que, entre outras funções, fornece uma interface entre PHP eo servidor web, implementado de uma forma que o servidor entende. Esta forma é o que é conhecido como um SAPI.

Existem diferentes tipos de SAPIs para várias extensões de servidor web. Por exemplo, para além dos listados acima, outros SAPIs para a linguagem PHP incluem a Common Gateway Interface (CGI) e de linha de comando de interface (CLI).

PHP também pode ser usado para escrever de desktop interface gráfica do usuário (GUI), utilizando o PHP-GTK extensão. PHP-GTK não está incluído na distribuição oficial do PHP, e como uma extensão que pode ser usado apenas com PHP versões 5.1.0 e mais recentes. A forma mais comum de instalar o PHP-GTK é a compilá-lo a partir do código fonte.

Quando o PHP é instalado e utilizado em nuvem ambientes, kits de desenvolvimento de software (SDKs) são fornecidos para o uso de recursos específicos de nuvem. Por exemplo:

Inúmeras opções de configuração são suportados, afetando ambos os recursos PHP núcleo e extensões. Arquivo de configuração php.inié procurado em locais diferentes, dependendo da maneira como PHP é usada. O arquivo de configuração é dividido em várias seções, enquanto algumas das opções de configuração também pode ser definido dentro da configuração do servidor web.

Usar

Uma visão ampla do pacote de software LAMP, aqui apresentados em conjunto com Squid .

PHP é uma linguagem de scripts de propósito geral que é especialmente adequado para server-side desenvolvimento web , caso em que PHP geralmente é executado em um servidor web . Qualquer código PHP em um arquivo solicitado é executado pelo tempo de execução PHP, geralmente para criar página web dinâmica conteúdo ou imagens dinâmicas utilizadas em sites ou em outros lugares. Ele também pode ser usado para a linha de comando de script e do lado do cliente da interface gráfica de utilizador aplicações (GUI). PHP pode ser implantado na maioria dos servidores web, muitos sistemas operacionais e plataformas , e pode ser usado com muitos sistemas de gerenciamento de banco de dados relacional (RDBMS). A maioria dos web hosting prestadores de apoiar PHP para uso por seus clientes. Ele está disponível gratuitamente, eo Grupo PHP fornece o código fonte completo para utilizadores criar, personalizar e estender para seu próprio uso.

Página web dinâmico: exemplo de scripting do lado do servidor (PHP e MySQL).

PHP atua principalmente como um filtro , tendo a entrada de um arquivo ou fluxo de texto contendo e / ou instruções PHP e produzir um outro fluxo de dados. Mais comumente, a saída será HTML, embora pudesse ser JSON , XML ou dados binários , como imagem ou formatos de áudio. Desde PHP 4, o PHP parser compila entrada para produzir bytecode para processamento pelo Zend Engine , dando um melhor desempenho ao longo de sua intérprete antecessor.

Originalmente concebido para criar dinâmicas páginas da web , PHP agora se concentra principalmente no script do lado do servidor , e é semelhante a outras linguagens de script do lado do servidor que fornecem conteúdo dinâmico a partir de um servidor web para um cliente , como Microsoft 's ASP.NET , Sun Microsystems ' JavaServer Pages , e mod_perl . PHP também tem atraído o desenvolvimento de muitas estruturas de software que fornecem blocos de construção e uma estrutura de design para promover o desenvolvimento rápido de aplicações (RAD). Algumas delas incluem PRADO , CakePHP , Symfony , CodeIgniter , Laravel , Yii Framework , Phalcon e Zend Framework , oferecendo características semelhantes a outros frameworks web .

A arquitetura LAMP tornou-se popular na indústria da web como forma de implantação de aplicativos web. PHP é comumente utilizado como o P neste pacote ao lado Linux , Apache e MySQL , embora o P também pode referir-se a Python , Perl , ou alguma mistura dos três. Pacotes semelhantes, WAMP e MAMP , também estão disponíveis para o Windows e OS X , com a primeira letra em pé para o respectivo sistema operacional. Embora ambos PHP e Apache são fornecidos como parte da base de Mac OS X instalar, os usuários desses pacotes procurar um mecanismo de instalação mais simples, que podem ser mais facilmente mantido até à data.

Em abril de 2007, mais de 20 milhões de domínios da Internet teve serviços web hospedados em servidores com PHP instalado e mod_php foi registrado como o mais popular Apache HTTP Server módulo. Em junho de 2018, o PHP foi usado como a linguagem de programação do lado do servidor em 83,5% dos sites onde a língua pôde ser determinado. Sistemas de gerenciamento de conteúdo da web escritas em PHP incluem MediaWiki , Joomla , eZ Publish , Plataforma eZ , SilverStripe , WordPress , Drupal , e Moodle . Sites escritos em PHP, no back-end e / ou porção voltada para o usuário, incluem Facebook , Digg , Tumblr , Dailymotion , e Slack .

Para cenários de uso específicos e mais avançados, PHP oferece uma maneira bem definidos e documentados para escrever extensões personalizadas em C ou C ++ . Além de ampliar a própria linguagem na forma de adicional bibliotecas , as extensões estão fornecendo uma maneira para melhorar a velocidade de execução onde é crítica e não há espaço para melhorias, utilizando uma verdadeira linguagem compilada . PHP também oferece formas bem definidas para incorporar-se em outros projetos de software. Dessa forma, PHP pode ser facilmente utilizado como um interno linguagem de script para outro projeto, fornecendo também apertado interface com internos específicos do projeto de estruturas de dados .

PHP recebeu críticas mistas devido à falta de suporte para multithreading no nível da linguagem núcleo, embora usando threads é possível graças ao "pthreads" PECL extensão.

A partir de janeiro de 2013, o PHP foi utilizado em mais de 240 milhões de sites (39% da amostragem) e foi instalado em 2,1 milhões de servidores web .

Uma interface de linha de comando, php-cli, e dois ActiveX host Windows Script mecanismos de script PHP foram produzidos.

Segurança

Em 2017, 3% de todas as vulnerabilidades listadas pelo National Vulnerability Database estavam ligados ao PHP; Historicamente, cerca de 30% de todas as vulnerabilidades listados desde 1996 nesta base de dados estão ligados a PHP. Falhas da própria linguagem ou de suas bibliotecas centrais técnicas de segurança não são frequentes (22 em 2009, cerca de 1% do total, embora PHP aplica-se a cerca de 20% dos programas listados). Reconhecendo que os programadores cometem erros, alguns idiomas incluem mancha verificação para detectar automaticamente a falta de validação de entrada que induz muitas questões. Tal característica está sendo desenvolvido para PHP, mas a sua inclusão em uma versão foi rejeitado várias vezes no passado.

Há manchas de proteção avançados, como Suhosin e endurecimento -patch, especialmente projetados para ambientes de hospedagem web.

Historicamente, as versões antigas do PHP teve alguns parâmetros de configuração e valores padrão para essas configurações de tempo de execução que fizeram algumas aplicações PHP propensas a problemas de segurança. Entre estes, magic_quotes_gpc e register_globals diretivas de configuração foram os mais conhecidos; este último fez quaisquer parâmetros de URL se tornam variáveis PHP, abrindo um caminho para sérias vulnerabilidades de segurança, permitindo que um atacante para definir o valor de qualquer variável global não inicializado e interferir com a execução de um script PHP. Suporte para " magic quotes " e "Register Globals" Configurações tornou-se obsoleta a partir do PHP 5.3.0, e removido a partir do PHP 5.4.0.

Outro exemplo para o configurações de tempo de execução potencial vulnerabilidade vem da falta de desativar a execução PHP (por exemplo, através de motor de diretiva de configuração) para o diretório onde os arquivos enviados são armazenados; permitindo que ele pode resultar na execução de código PHP malicioso embutido dentro dos arquivos enviados, por exemplo, quando permitindo aos usuários fazer upload de imagens. A melhor prática, quer seja para localizar o diretório de imagem fora da raiz do documento disponível para o servidor web e servi-lo via script intermediário, ou desabilitar a execução PHP para o diretório que armazena os arquivos enviados.

Além disso, permitindo que o carregamento dinâmico de extensões PHP (via enable_dl diretiva de configuração) em uma hospedagem compartilhada ambiente pode levar a problemas de segurança.

Implícitas conversões de tipo que resultam em valores diferentes que estão sendo tratados como iguais, às vezes contra a intenção do programador, pode levar a problemas de segurança. Por exemplo, o resultado da comparação 0e1234 == 0é true, porque o primeiro valor de comparação é tratado como notação científica tendo o valor ( 0 × 10 1234 ), isto é, de zero . Erros como este resultou em vulnerabilidades de autenticação no Fórum Simple Machines , Typo3 e phpBB quando MD5 hashes de senha foram comparados. O modo recomendado é a utilização de hash_equals () (para temporização ataque segurança), strcmp ou o operador de identidade ( ===), como 0e1234 === 0resulta em false.

Numa análise de mais de 170000 2013 desfigurações Site , publicado pela Zona-H , a técnica utilizada com maior frequência (53%) era a exploração de vulnerabilidade inclusão arquivo , principalmente relacionado com o uso inseguro do PHP funções incluem , exigem , e allow_url_fopen .

Veja também

Referências

Outras leituras

links externos