PHP e Sistemas de Informação João Paulo Ribeiro jpribeiro.com Hello world! João Paulo Ribeiro • Graduando (Concluinte) de Ciência da Computação – UFCG • Pesquisador no Laboratório de Sistemas de Informação • 10 anos de experiência em desenvolvimento para Web • Jpribeiro.com / [email protected] CERC (2002) 1º site de escola da cidade a disponibilizar o boletim online Cesrei (2006) Sistema de controle acadêmico O Que é ? • Linguagem de programação (sério?) • Focada na web • Inicialmente, PHP = Personal Home Page (Péssimo) • Depois, PHP: PHP Hypertext Processor (Recursivo, e bem melhor) Histórico • 1994: Páginas HTML estáticas Histórico • Rasmus Lerdorf criou o core de PHP (em C) com uma série de utilitários para dinamizar/monitorar o conteúdo de seu próprio • Comunidade do software livre site interessou-se e contribuiu para a criação do PHP/FI (Personal Home Page / Forms Interpreter) Histórico • Em 1998, foi lançado o PHP 3, primeiro que se assemelha com o atual (PHP/FI, em sua versão 2, foi descontinuado) • Infraestrutura sólida para diferentes bancos de dados, protocolos e APIs • PHP 4 lançado em 2000, com nova Zend Engine • Zend = Zeev Suraski + Andi Gutmans • Melhoria de performance nos servidores • PHP 5 (versão atual) lançado em 2004 • Orientação a objetos Por que aprender • PHP é uma das linguagens mais utilizadas do mundo • Figura no top 10 do TIOBE index (www.tiobe.com) há 10 anos • Atualmente (Abril 2012), está na 6ª posição, atrás dos “Cs” (C, C++, Objective-C e C#) e Java Por que aprender • PHP é uma das linguagens mais utilizadas do mundo • PHP é usado em 77,6% dos sites na internet, de acordo com os dados da W3Techs (http://w3techs.com) – sendo a linguagem server-side mais utilizada Por que aprender • Tem muita vaga de trabalho • Dados do site Indeed.com, linguagens server-side (EUA) Por que aprender • Tem muita vaga de trabalho • Dados do site JobsTractor (jobstractor.com), com as vagas anunciadas via Twitter (16.855 vagas anunciadas em março de 2012) Quem usa PHP? Quem usa Quem usa Quem usa Quem usa Terceiro maior motor de busca do mundo, principal da China (ultra Quem usa Quem usa Quem usa Apresentação durante a Semana Acadêmica de Comp Característi cas • Linguagem de scripts • Código pode ser mesclado em meio a HTML Característi cas Página HTML resultante Código-fonte do HTML resu Característi cas • Linguagem interpretada • Código não é compilado - interpretado a ca • Roda em servidor • Servidor executa o interpretador PHP Apache HTTP Server: • • Servidor web mais popular do mundo (mais de 100 milhões de sites – WOW) Versões para muitos diferentes SO Característi cas • Processador de hipertexto serverside Característi cas • Multiplataforma • • • Interpretadores para as mais diferentes plataformas • Unix, Linux, Windows, OS X, Risc, Netware, Solaris........ Disponibilizado o código-fonte no site oficial (php.net) Write once, run everywhere • Open-source! • Programação procedural, orientada a Característi cas • PHP também pode ser utilizado em outras formas: • CLI: Command Line Interface • PHP-GTK: Extensão para escrever aplicações desktop com interface gráfica Segundo a documentação oficial: “PHP is probably not the very best language to create a desktop application with a graphical user interface” Característi cas • Output • • • • • • HTML Imagens (Extensão GD): GIF, PNG, JPEG, WBMP, XPM PDF (Extensão PDFlib) Flash (Extensão libswf) XML, XHTML (Extensão libxml) ... • Existem muitas (muitas) extensões na internet: • PECL (PHP Extension Community Library): 280 pacotes Característi cas • Um dos pontos mais fortes de PHP é sua integração incrivelmente simples com bancos de dados • Camadas de abstração: • DBA: Database Abstraction Layer • dbX: Abstração de algum BD específico (X) • ODBC: Open Data Base Connectivity • Adabas D, IBM DB2, iODBC, Solid, Sybase SQL Anywhere Característi cas • Extensões de SGBDs específicos: MySQL PostgreSQL Oracle SQL Server SQLite Mongo IBM DB2 Firebird/Int erbase CUBRID DB+++ dBase filePro Frontba se Sybase Ingres MaxDB (Entre outros) Característi cas • PHP dá suporte a diversos protocolos de comunicação • LDAP: Lightweight Directory Access Protocol • IMAP: Internet Message Access Protocol • POP3: Post Office Protocol • SMTP: Simple Mail Transfer Protocol • SOAP: Simple Object Access Protocol Característi cas • Ou seja, você escolhe: • • • • • • Servidor web: Apache, IIS, LiteSpeed, TUX, thttpd, ... Sistema operacional: Unix, Linux, Windows, OS X, Risc, ... Programação procedural, orientada a objetos, ou híbrida Extensões SGBD Protocolos de comunicação = Flexibilidade A linguagem em si Delimitando o código PHP • Maneira normal e bonita, para todas as ocasiões • Outras maneiras, para os diferentões • Para código embutido em HTML • Short tags (depende de configuração) Tipos • Primitivos • Integer • • Float (32 bits) Double (64 bits) • Boolean • String (não há limite máximo) Tipos • Arrays • Na verdade, são mapas (arrays associativos) Array associativo “João” “Paulo” 42 TRUE Índices Valores Qualquer tipo Integer ou string Tipos • Arrays • Criação do array Conteúdo das variáveis com o comando var_dump($variave var_dump($outro_array) var_dump($um_array) Tipos • Arrays • Acesso ao array $um_array $outro_array Acesso aos arrays Tipos • Arrays • Inserir no array Array original Array após a inserção acima Tipos • Arrays • Inserir no array Array original Array após inserções acima Tipos • Arrays • Deletar do array (usar função unset($variavel)) Array original Array após a remoção acima Índice 2 foi removido, e o array não foi reindexado (índices mantidos) Tipos • Arrays • Passar a variável do array como argumento para a função unset($variavel) vai resultar na remoção completa do array Ao tentar acessar a variável $outro_array, Tipos Obs: Strings podem ser tratadas como arrays de caracteres Tipos • Tipos especiais • Resource: Variável especial, que armazena referência para recursos externos (handlers de arquivos, conexões de banco de dados, canvas de imagens) • NULL: Indica quando uma variável não possui nenhum valor . A variável tem valor NULL se: • Foi definida com a constante NULL; • Ainda não recebeu nenhum valor; • Foi apagada através de unset() Sistema de Tipos • PHP é dinamicamente tipada • Variáveis, parâmetros e expressões não têm tipo fixo associado. Apenas valores têm tipo, e as variáveis podem assumir valores de diferentes tipos durante a execução do programa. • Ou seja, em PHP não há declaração de Sistema de Tipos • PHP é fracamente tipada • A conversão de um valor de um tipo para outro é feita implicitamente (coerção) Coerção de String para Integer • O programador deve ter cuidado com essa feature da linguagem, especialmente estes dois seguintes casos “estranhos”: Sistema de Tipos 1. Conversão de strings para números • Se a string está sendo avaliada em um contexto numérico, o valor resultante é numérico, determinado por essas regras: • Se a string não contém os caracteres “.”, “e” e “E”, e seu valor numérico está nos limites de Integer, é tratada como número inteiro • Caso contrário, é tratada como float • O valor numérico é dado pela porção inicial da string. Se essa porção não for um número válido, o valor é 0 Sistema de Tipos 1. Conversão de strings para números Sistema de Tipos 2. Conversão em Boolean • Se for usado em operador, função ou estrutura de controle que requer argumento Boolean, qualquer valor é convertido em Boolean Valor automaticamente Boolean Valor Boolean NULL False “” False Array () False “0” False “1” True Objec t True “-1” True 0 False “João” True 0.000 1 True “False” True Resourc e True Sistema de Tipos • Checagem de tipos • • Por ser dinamicamente tipada, não há checagem de tipos em PHP Há funções para a observação do tipo da variável, para uma checagem de tipos • is_scalar() manual, caso seja necessário: • • • • • • • • is_array() is_bool() is_double() is_float() is_int() is_null() is_numeric() is_object() • • • • is_string() gettype() get_resource_type() get_class() Sistema de Tipos • PHP 5 introduziu o conceito de Type Hinting • Com Type Hinting, é possível forçar que os parâmetros de funções sejam de uma classe específica de Object, Interface ou Array (esse, apenas desde PHP 5.1) Variáveis • Representadas por um $ seguido de letras, números e símbolos (iniciando com letra) • Atribuição por referência • Nova variável é um “apelido” para a referenciada Variáveis • $this é um nome reservado • Variáveis predefinidas: Acessíveis em qualquer escopo de qualquer • $_COOKIE programa • • • • • • • $GLOBALS $_SERVER $_GET $_POST $_FILES $_REQUEST $_SESSION • • • • • $php_errormsg $HTTP_RAW_POST_DATA $http_response_header $argc $argv Constantes • Definição através da função define() • __LINE__ • __CLASS__ • Também existem diversas constantes • __FILE__ • PHP_VERSION pré-definidas • • __DIR__ __FUNCTION__ • • PHP_INT_MAX Várias outras Funções • Definição • Chamada Funções • Argumentos opcionais Funções • Qualquer código PHP válido pode ser colocado no corpo de definição de função incluindo definição de outras funções e classes • Como PHP é estupidamente GELADA dinâmica, a função só é definida no momento em que o fluxo passar por sua definição. Por isso deve-se ter cuidado para não fazer invocação a uma função indefinida Funções Fluxo não passa por esse ponto, portanto essa função não é definida Funções • A passagem de parâmetro é feita, por default: • • Por cópia/valor, quando o parâmetro não for um Object Por referência, caso o parâmetro for um Object Type hinting! Funções • Porém, também pode-se usar o operador & para fazer a passagem por referência, quando necessário Funções • Sobrecarga • PHP não dá suporte a nenhum tipo de sobrecarga de funções – dando erro fatal ao se tentar (nem tente) Operadores • Aritméticos • Bit a bit Exemplo Nome Exemplo Nome -$a Negação $a & $b AND $a + $b Adição $a | $b OR $a - $b Subtração $a ^ $b XOR $a * $b Multiplic ação ~$a NOT $a / $b Divisão $a % $b Módulo $a >> $b Deslocamento à direita • $a << $b Deslocamento à esquerda Obs: O operador Divisão resulta em inteiro caso seja divisão exata entre inteiros, ponto flutante caso contrário Operadores • Comparação Exemplo Nome $a == $b Igual $a === $b Idêntico $a != $b Diferente $a <> $b Diferente $a !== $b Não idêntico $a < $b Menor que $a > $b $a <= $b $a >= $b Maior que Menor ou igual Maior ou Levam em conta o tipo Operadores • Comparação Observar coerções discutidas anteriormente! Operadores • Lógicos Exemplo Nome $a && $b AND $a || $b OR $a xor $b XOR !$a NOT Observar coerções para Boolean Operadores • Concatenação: . (ponto) • Atribuição (além do =) Exemplo Significado $a += $b $a = $a + $b $a -= $b $a = $a - $b $a *= $b $a = $a * $b $a /= $b $a = $a / $b $a %= $b $a = $a % $b $a .= $b $a = $a . $b Exemplo Nome $a++ PósIncremento ++$a PréIncremento $a-- PósDecremento --$a Pré- Operadores • É possível fazer atribuição de mais de uma variável ao mesmo tempo, com a função list() list($var1, $var2, ...) = $array Índice 0 Índice 1 Obs.: Só funciona em arrays com índices numéricos Operadores • Operador ternário condicao ? expressao1 : expressao2 • É avaliado em expressao1 caso condicao seja um valor verdadeiro, e expressao2 caso contrário Estruturas de Controle • Comandos condicionais • If/elseif/else if (exp) { ... } elseif (exp) { ... } else { ... } Estruturas de Controle • Comandos condicionais • Switch switch (exp) { case valor1: ... break; case valor2: ... break; ... default: ... break; } Estruturas de Controle • Comandos iterativos • While while (exp) { ... } O programador deve ter cuidado para que exp em algum momento deixe de ser verdadeira, para evitar loop infinito: Estruturas de Controle • Comandos iterativos • Do-while do { ... } while (exp); • For for (exp1; exp2; exp3) {...} Estruturas de Controle • Comandos iterativos • Foreach: Iterar sobre arrays foreach (array as $valor) {...} foreach (array as $indice => $valor) {...} Estruturas de Controle • Sequenciadores de escape • Continue Pula o restante da iteração corrente, em um loop • Break Interrompe a iteração corrente e sai do loop Classes e Objetos • PHP 5 tem um modelo de objetos completo • • • • • • • Visibilidade Herança Polimorfismo Interfaces Final, static e abstract Sobrescrita ... Classes e Objetos • Basicão Pode usar o alias __construct Classes e Objetos • Basicão Precisava ser da classe DateTime Classes e Objetos • Métodos e atributos estáticos • Acesso Classes e Objetos • Herança Classes e Objetos • Classes e métodos abstratos Classes e Objetos • Interfaces • Uma interface também pode herdar (extends) de uma ou mais interfaces Classes e Objetos • Sobrescrita • Uma classe pode sobrescrever métodos de sua classe mãe Classes e Objetos • Final • • Classes poderão Métodos poderão declaradas com final não ser extendidas declaradas com final não ser sobrescritos Framewor ks Framewor ks • Esses frameworks destinam-se ao Rapid Application Development (RAD), aplicando o modelo MVC (Model-View-Controller) Framewor ks • Também incluem diversos recursos embutidos, como: • • • • • • APIs, como Google, Facebook, Twitter, etc... Web services, tanto para publicar quanto consumir Serviços de autenticação AJAX, jQuery, Scriptaculous Segurança ... Framewor ks • Cada framework tem seus próprios recursos. Então como escolher? • Tudo depende de suas necessidades (óóóó) • Qual o principal foco de sua aplicação • Qual será o seu ambiente de hospedagem • Quais os pontos fortes/fracos do desenvolvedor? • Quem poderá me ajudar? • PHP Frameworks (phpframeworks.com) é um site que dá as características e classifica os frameworks mais conhecidos Dúvidas? Acabou! • • • • • • Referênc ias Documentação oficial de PHP: http://www.php.net/docs.php, acessado em 29/04/2012 PHP Profissional – Alexandre Melo/Maurício Nascimento, Editora Novatec Apresentação “Cross Platform PHP”, de Elizabeth Smith, disponível em http://emsmith.net/resources, acessado em 29/04/2012 Apresentação “PHP para Aplicações Web de Grande Porte”, de Felipe Ribeiro, disponível em http://www.slideshare.net/felipernb, acessado em 29/04/2012 TIOBE Index, disponível em http://www.tiobe.com/index.php/content/ paperinfo/tpci/index.html, acessado em 29/04/2012 Usage Statistics and Market Share of Server-side Programming Languages for Websites, April 2012, disponível em http://w3techs.com/technologies/