PHP e Sistemas de Informação Web 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 / joao@jpribeiro.com
1º site de escola da cidade a disponibilizar o boletim online CERC (2002) 1º site de escola da cidade a disponibilizar o boletim online
Sistema de controle acadêmico 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 site Comunidade do software livre 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 (ultrapassando Google e Yahoo)
Quem usa
Quem usa
Quem usa Apresentação durante a Semana Acadêmica de Computação :-)
Características Linguagem de scripts Código pode ser mesclado em meio a HTML
Características Página HTML resultante Código-fonte do HTML resultante
Características Linguagem interpretada Roda em servidor Código não é compilado - interpretado a cada execução 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 Open-source
Características Processador de hipertexto server-side
Características Multiplataforma Open-source! 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 objetos, ou híbrida
Características 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ísticas Output Existem muitas (muitas) extensões na internet: 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 PEAR (PHP Extension and Application Repository): 586 pacotes
Características 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 PDO: PHP Data Objects
Características Extensões de SGBDs específicos: MySQL PostgreSQL Oracle SQL Server SQLite Mongo IBM DB2 Firebird/Interbase CUBRID DB+++ dBase filePro Frontbase Sybase Ingres MaxDB (Entre outros)
Características 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 ... Também pode abrir conexões por sockets, e comunicar-se usando qualquer protocolo
Características = Flexibilidade 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 Índices Valores Arrays Na verdade, são mapas (arrays associativos) Array associativo “João” “Paulo” 42 TRUE Índices Valores Qualquer tipo Integer ou string
var_dump($outro_array) Tipos Arrays Criação do array Conteúdo das variáveis com o comando var_dump($variavel): var_dump($outro_array) var_dump($um_array)
Tipos Arrays Acesso ao array $um_array $outro_array Acesso aos arrays
Array após a inserção acima Tipos Arrays Inserir no array Array original Array após a inserção acima
Array após inserções 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() Object: Instância de classe
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 variáveis
Coerção de String para Integer Sistema de Tipos PHP é fracamente tipada A conversão de um valor de um tipo para outro é feita implicitamente (coerção) O programador deve ter cuidado com essa feature da linguagem, especialmente estes dois seguintes casos “estranhos”: Coerção de String para Integer
Sistema de Tipos 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 Conversão de strings para números
Sistema de Tipos Conversão em Boolean Se for usado em operador, função ou estrutura de controle que requer argumento Boolean, qualquer valor é convertido automaticamente em Boolean Valor Boolean NULL False Array() Object True 0.0001 42 -1 Valor Boolean “” False “0” “1” True “-1” “João” “False” Resource
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 manual, caso seja necessário: is_array() is_bool() is_double() is_float() is_int() is_null() is_numeric() is_object() is_resource() is_scalar() 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 programa $GLOBALS $_SERVER $_GET $_POST $_FILES $_REQUEST $_SESSION $_ENV $_COOKIE $php_errormsg $HTTP_RAW_POST_DATA $http_response_header $argc $argv
Constantes Definição através da função define() Também existem diversas constantes pré-definidas __LINE__ __CLASS__ __FILE__ PHP_VERSION __DIR__ PHP_INT_MAX __FUNCTION__ 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
Fluxo não passa por esse ponto, portanto essa função não é definida 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 Obs: O operador Divisão resulta em inteiro caso seja divisão exata entre inteiros, ponto flutante caso contrário Bit a bit Exemplo Nome -$a Negação $a + $b Adição $a - $b Subtração $a * $b Multiplicação $a / $b Divisão $a % $b Módulo Exemplo Nome $a & $b AND $a | $b OR $a ^ $b XOR ~$a NOT $a << $b Deslocamento à esquerda $a >> $b Deslocamento à direita
Operadores Comparação Exemplo Nome $a == $b Igual $a === $b Idêntico Diferente $a <> $b $a !== $b Não idêntico $a < $b Menor que $a > $b Maior que $a <= $b Menor ou igual $a >= $b Maior ou igual Levam em conta o tipo
Observar coerções discutidas anteriormente! Operadores Comparação Observar coerções discutidas anteriormente!
Operadores Lógicos Exemplo Nome $a && $b AND $a || $b OR $a xor $b XOR 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ós-Incremento ++$a Pré-Incremento $a-- Pós-Decremento --$a Pré-Decremento
list($var1, $var2, ...) = $array 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: default: }
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 ...
Pode usar o alias __construct Classes e Objetos Pode usar o alias __construct Basicão
Precisava ser da classe DateTime Classes e Objetos Precisava ser da classe DateTime Basicão
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 declaradas com final não poderão ser extendidas Métodos declaradas com final não poderão ser sobrescritos
Frameworks
Frameworks Esses frameworks destinam-se ao Rapid Application Development (RAD), aplicando o modelo MVC (Model-View-Controller)
Frameworks 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 ...
Frameworks 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ências 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/ overview/programming_language/all, acessado em 29/04/2012 Job Search | one search. all jobs. Indeed.com, disponível em http://www.indeed.com, acessado em 29/04/2012 Programming language trends - March 2012 | Jobs Tractor, disponível em http://jobstractor.com/monthly-stats, acessado em 29/04/2012