SlideShare una empresa de Scribd logo
1 de 44
Descargar para leer sin conexión
PHP: Programação
para Seres Humanos

      Carlos Henrique R. de Souza
      XX.Sepai.Belém.PA
      Outubro de 2006
Agenda
    Objetivo


    Paradigmas


    A Web


    O que é PHP / PHP­CLI / PHP­GTK


    Características / Fatos


    Primeiros passos


    IDE 


    Orientação a Objetos


    Frameworks


    CMS


    Segurança


    Conclusões

Objetivo

    Desenvolvimento em PHP


        Iniciantes em PHP
    

        Iniciantes em outras linguagens
    

        Alunos de cursos técnicos  / graduaçao em TI
    

        Entusiastas
    


    Quando usá­lo


    Quando não usá­lo 

Paradigmas

    Client­Side 


        Vantagens:
    

            Alicerce robusto
        

            Controle sobre os recursos
        

            Liberdade local
        


        Desvantagens:
    

            Desenvolvimento ‘do zero’
        

            Liberdade local
        

            Bugfix
        
Paradigmas

    Server­Side

Paradigmas

    Server­Side 


        Vantagens:
    

            Interface pré­modelada
        

            Maior acessibilidade
        

            Bugfix
        


        Desvantagens:
    

            Pouca (quase nenhuma) informação sobre cliente
        

            Preocupação com tráfego
        

            Popularização no desenvolvimento de aplicações
        
A Web
       Total Sites Across All Domains August 1995 ­ October 2006 




     Em novembro de 1992 – 26 servidores web          fonte: netcraft
 

     Em outubro de 2006 – 98 milhões de ‘hostnames’
 




 “A internet náo é uma rede de computadores, mas sim de pessoas”
O que é PHP ?
    Uma linguagem de programação open­


    source e de propósitos­gerais
    Criada por Rasmus Lerdof em 1995 (PHP/FI)


    Reescrita por Andi Gtmans e Zeev Suraszi 


    (Zend) em 1997 – PHP3
    Utilizada especialmente para 


    desenvolvimento web (procedural e/ou OO)
    Misturada com HTML


    TODO código PHP é interpretado no servidor

O que é PHP ?

    arquivo.php (no servidor)



    <html>
      <p><b><? echo “Olá, Mundo!” ?></b></p>
    </html>


    arquivo.php (no cliente)



    <html>
      <p><b>Olá, Mundo!</b></p>
    </html>
O que é PHP ?

    PHP­CLI


        Command Line Interpreter
    

        Uso similar a bash, perl, awk
    

        Client­Side
    

        Cron tasks
    



    #!/usr/bin/php –q
    <?
    echo “PHP aqui também!”;
    ?>
O que é PHP ?

    PHP­GTK


        Gimp Tool Kit
    

            Bibliotecas escritas em C
        


        Client/Server­Side
    

        Cross­platform
    
Características

    Independente de Plataforma


        Linux, HP­UX, Mac OS X, Win32 (NT/W95/W98/W2000), 
    

        BeOS, Solaris
    Servidores


        Apache, MS­IIS / PWS, Xitami
    


    Suporte nativo a diversos SGBDs


        Adabas D, dBase, Empress, FilePro (apenas leitura), 
    

        Hyperware, IBM DB2, Informix, Ingres, Interbase, 
        FrontBase, mSQL, Direct MS­SQL, MySQL, ODBC, Oracle 
        (OCI7 e OCI8), Ovrimos, PostgreSQL, SQLite, Solid, 
        Sybase, Velocis, Unix dbm
Características

    Extensões:


        GD (imagens), LDAP, SNMP, SOAP, IMAP, FTP, 
    

        MCAL, IMSP, Java, Curl, gettext, SWF, CCVS, 
        zlib, etc...
Características

    Tipagem dinâmica (‘duck’ typing) e 


    conversão automática
         If ( funcao_foo($arg_foo) ) {
             ... fazer algo ...
         }


    Funções suficientes!                 tipo int ou String

Características
    Integração com outras linguagens


         (Java, Perl, MS.net , etc.)
    

         public class JavaPHP {
             private String nome = null;
             public void setNome(String nome) {
                 this.nome = nome;
             }
             public String getNome() {
                 return nome;
             }
         }

    <?
         $javaPHP = new Java('JavaPHP');
         $javaPHP->setNome(quot;Java+PHPquot;);
         echo quot;Método do Java = quot; . $javaPHP->getNome();
         ?>
                                ex: PHPBrasil
Características

 Sintaxe simples, semelhante a Perl e C


Perl:
$conn = Pg::connectdb(quot;dbname=foo host=localhost user=root password=123quot;);


PHP:
$conn = pg_connect(quot;host=localhost dbname=foo user=root password=123quot;)


    Otimizadores


        APC, Zend Optimizer, Turck MMCache
    
Características

    Arrays


        Ordenados
    

        <?  $vetor[0] = “primeiro”;
            $vetor[1] = “segundo”;
            $vetor[] = “terceiro”;  ?>
        Associativos
    

        <?  $vetor[‘caike’] = “php”;
            $vetor[‘jamesgoslin’] = “java”;
            $vetor[‘joselito’] = “asp”;  ?>
        48 funções para array
    
Fatos




     19.491.324 Domains
 

     1.313.977 IP Addresses
                             fonte: netcraft
Fatos

“Top 10 Programming Languages”




                  fonte: tiobe
Fatos




        fonte: nexen
Primeiros Passos

    Opção 1: LAMP


        Linux com APT­GET
    

            apt­get install apache2 php5 mysql­server php5­mysql 
        

            mysql­query­browser
        Compilações e instalações independentes
    


    Opção 2: WAMP


        EasyPHP (7.7mb)
    

        Instalações independentes
    
IDEs

    Open­Source:


        Eclipse (PHPEclipse, PHP­IDE), Tulip, 
    

        PHPDesigner
    Proprietárias:


        Zend Studio, Dreamweaver
    
Orientação a Objetos

    Inspiraçao no mundo real


    Introduzida no PHP 3


    Reescrita para o PHP 4, mas ainda 


    insuficiente
    PHP5 = OO madura e similar a outras 


    linguagens
Orientação a Objetos

    construtores e destrutores padrão



class BD{
    var $conn;
    function __construct($host, $user, $pw){
        $this­>conn = mysql_connect($host,$user,$pw);
    }

    function __destruct($host, $user, $pass){
        mysql_close($this­>conn) ;
    }
}
Orientação a Objetos

    modificadores de acesso


        public
    

        private
    

        protected
    



    class Funcionario { 
         public $nome;
         protected $telefone;
         private $salario;
    } 
Orientação a Objetos

    __set(), __get(), __call()


class Pessoa {

  private $dt_nascimento;

  function __set($atributo, $valor){
    if($atributo == quot;dt_nascimentoquot;){
       $dt_nascimento = implode(quot;­quot;,array_reverse(explode(quot;/quot;,$valor)));
       }
    }

}

$p1 = new Pessoa();
$p1­>dt_nascimento = quot;03/09/1984quot;; // ... dt_nascimento = 1984­09­03
Orientação a Objetos

    __set(), __get(), __call()


class Conta {

  private $saldo;
  private $limite = 100;

  function setSaldo() ...
  function __get($at){
      if($at == “saldo”) return $this­>saldo + $this­>limite;
  }
}

$p1 = new Conta();
$p1­>setSaldo(200);
echo $p1­>saldo; // 300
Orientação a Objetos

    __set(), __get(), __call()


class Guitarra {

  private $cordas;
  private $captadores;

  function __call($metodo, $args){
   echo quot;@#&!! $metodo não existe para a classe guitarra !quot;;
  }
}

$a = new Guitarra();
$a­>tocarUmPagodao();
Orientação a Objetos

    interfaces



          interface IPessoa{

              function fazerObrigacoes();
              function seDivertir();

          }
Orientação a Objetos

    interfaces


    class Garoto implements IPessoa{

        private $obrigacoes = false;

        function fazerObrigacoes(){
            echo “Fazer meu dever de casa”;
            $this­>obrigacoes = true;
        }

        function seDivertir(){ echo “Jogar playstation”; }

        function getObrigacoes(){ return $this­>obrigacoes; }
    }
Orientação a Objetos

    interfaces


    class Adulto implements IPessoa{

        private $obrigacoes = false;

        function fazerObrigacoes(){
            echo “Trabalhar para pagar o PS do meu filho”;
             $this­>obrigacoes = true;
        }

        function seDivertir(){ echo “Verei o Papão jogar!”; }

        function getObrigacoes(){ return $this­>obrigacoes; }
    }
Orientação a Objetos

    interfaces


     class Deus{

         function julgar(IPessoa $p){

             if(!$p­>getObrigacoes()){
                   echo “Faça já suas obrigações!”;
                   $p­>fazerObrigacoes();
             }
             $p­>setDivertir();
         }
     }
Orientação a Objetos

    interfaces


     $objPessoa1 = new Garoto();
     Deus::julgar($objPessoa);

     Fazer meu dever de casa
     Jogar playstation


     $objPessoa2 = new Adulto();
     Deus::julgar($objPessoa2);

     Trabalhar para pagar o PS do meu filho
     Verei o Papão jogar
Orientação a Objetos

    classes e métodos abstratos


    propriedades estáticas


    clonagem


    manipulação de erros (try/catch)

Frameworks

    Genial, ClassGenerator, MetaClass, Smarty, 


    PRADO, CakePHP, Symfony, etc.
    “ Não reinvente a roda, mas saiba como ela 


    foi feita ”
Content Management System
(CMS)
    Portais:


        Joomla, Mambo, PHP­Nuke, etc ...
    


    Blogs:


        Wordpress, simplog
    


    eCommerce:


        phpShop, XT­Commerce
    


    GroupWare:


        NetOffice, PHPGroupWare
    
Segurança

    SQLInjection


    XSS


    Engenharia Social 

SQL Injection

    Manipulação dos scripts SQL



$sql= “... WHERE nome = `$_POST[`nome`]` AND senha = ‘$_POST[`senha`]`”;

        Login: bla’ or 1 = 1 –
        Senha: 123

$sql =  “... WHERE nome = ‘bla’ or 1 =1 ­­ ` AND senha = ‘123`”;


    Sempre validar entrada, SEMPRE!

SQL Injection

    Ajudam a evitar ataques de SQLInjection:


        addslashes
    

        mysql_real_escape_string
    

        magic_quotes
    
Cross-Site Scripting (XSS)

    Informação de um contexto (não­confiável) é inserida 


    em outro contexto
    Link em um e­mail: Fotos daquela sua amiga na festa


    <a href = 
    quot;http://xpto.com/?param=<script>...</script>”>
     Fotos daquela sua amiga na festa </a>

<a href = “http://tinyurl.com/y6tz8”>
   Fotos daquela sua amiga na festa </a>
Cross-Site Scripting (XSS)

    Ajudam a evitar ataques de XSS


        strip_tags
    

        htmlentities
    




    Sempre validar entrada e SAÍDA!

Engenharia Social

    Independente de tecnologia


    Caso Paris Hilton


    Caso Harvard Business School


    “ Não existe patch para falha humana...”

Conclusões

    PHP – programação para seres­humanos e 


    situações humanas no planeta Terra !

    “ Quando tudo que se tem é um martelo... ”

Fim
    Referências


        www.php.net
    

        www.netcraft.com
    

        www.opensourcecms.com
    

        www.nexen.net
    

        www.tiobe.com
    

        http://ref.web.cern.ch/ref/CERN/CNL/2001/001/www­history/
    

    Contato


        carloshrsouza@equilibriumweb.com
    

        www.equilibriumweb.com
    

        www.step2rock.com
    

    Grupo


        phppaidegua­subscribe@yahoogroups.com
    

Más contenido relacionado

La actualidad más candente

Workshop Ruby on Rails dia 1 ruby-pt
Workshop Ruby on Rails dia 1 ruby-ptWorkshop Ruby on Rails dia 1 ruby-pt
Workshop Ruby on Rails dia 1 ruby-ptPedro Sousa
 
Desenvolvimento Mobile com Ruby
Desenvolvimento Mobile com RubyDesenvolvimento Mobile com Ruby
Desenvolvimento Mobile com RubyRodrigo Martins
 
User Interface (in portuguese)
User Interface (in portuguese)User Interface (in portuguese)
User Interface (in portuguese)Bruno Pedro
 
Yet Another Ruby Framework - Como o Rails funciona por dentro
Yet Another Ruby Framework - Como o Rails funciona por dentroYet Another Ruby Framework - Como o Rails funciona por dentro
Yet Another Ruby Framework - Como o Rails funciona por dentroCarlos Brando
 
Minicurso de PHP Com Ajax
Minicurso de PHP Com AjaxMinicurso de PHP Com Ajax
Minicurso de PHP Com AjaxAdler Medrado
 
Aprender PHP e mySQL (UFCD0155)
Aprender PHP e mySQL (UFCD0155)Aprender PHP e mySQL (UFCD0155)
Aprender PHP e mySQL (UFCD0155)Afonso Gomes
 
Workshop Django Framework - 30/10/2018
Workshop Django Framework - 30/10/2018Workshop Django Framework - 30/10/2018
Workshop Django Framework - 30/10/2018Rafael Sales Pavarina
 
Implementando Segurança Em Sua Aplicação PHP
Implementando Segurança Em Sua Aplicação PHPImplementando Segurança Em Sua Aplicação PHP
Implementando Segurança Em Sua Aplicação PHPEr Galvão Abbott
 
Javascript levado a serio
Javascript levado a serioJavascript levado a serio
Javascript levado a serioJaydson Gomes
 
Aplicações rápidas para a Web com Django
Aplicações rápidas para a Web com DjangoAplicações rápidas para a Web com Django
Aplicações rápidas para a Web com DjangoFreedom DayMS
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAThiago Cifani
 

La actualidad más candente (17)

Workshop Ruby on Rails dia 1 ruby-pt
Workshop Ruby on Rails dia 1 ruby-ptWorkshop Ruby on Rails dia 1 ruby-pt
Workshop Ruby on Rails dia 1 ruby-pt
 
Ruby On Rails Regis
Ruby On Rails RegisRuby On Rails Regis
Ruby On Rails Regis
 
Desenvolvimento Mobile com Ruby
Desenvolvimento Mobile com RubyDesenvolvimento Mobile com Ruby
Desenvolvimento Mobile com Ruby
 
User Interface (in portuguese)
User Interface (in portuguese)User Interface (in portuguese)
User Interface (in portuguese)
 
Javascript aula 01 - visão geral
Javascript   aula 01 - visão geralJavascript   aula 01 - visão geral
Javascript aula 01 - visão geral
 
Yet Another Ruby Framework - Como o Rails funciona por dentro
Yet Another Ruby Framework - Como o Rails funciona por dentroYet Another Ruby Framework - Como o Rails funciona por dentro
Yet Another Ruby Framework - Como o Rails funciona por dentro
 
Minicurso de PHP Com Ajax
Minicurso de PHP Com AjaxMinicurso de PHP Com Ajax
Minicurso de PHP Com Ajax
 
Aprender PHP e mySQL (UFCD0155)
Aprender PHP e mySQL (UFCD0155)Aprender PHP e mySQL (UFCD0155)
Aprender PHP e mySQL (UFCD0155)
 
MongoDB + PHP
MongoDB + PHPMongoDB + PHP
MongoDB + PHP
 
Zend Framework
Zend FrameworkZend Framework
Zend Framework
 
Workshop Django Framework - 30/10/2018
Workshop Django Framework - 30/10/2018Workshop Django Framework - 30/10/2018
Workshop Django Framework - 30/10/2018
 
Implementando Segurança Em Sua Aplicação PHP
Implementando Segurança Em Sua Aplicação PHPImplementando Segurança Em Sua Aplicação PHP
Implementando Segurança Em Sua Aplicação PHP
 
Zend Framework
Zend FrameworkZend Framework
Zend Framework
 
Javascript levado a serio
Javascript levado a serioJavascript levado a serio
Javascript levado a serio
 
Aplicações rápidas para a Web com Django
Aplicações rápidas para a Web com DjangoAplicações rápidas para a Web com Django
Aplicações rápidas para a Web com Django
 
Web Offline
Web OfflineWeb Offline
Web Offline
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVA
 

Destacado

Mini-curso de Linux - SECCOMP 2009
Mini-curso de Linux - SECCOMP 2009Mini-curso de Linux - SECCOMP 2009
Mini-curso de Linux - SECCOMP 2009CI&T
 
Dev ninja -> vagrant + virtualbox + chef-solo + git + ec2
Dev ninja  -> vagrant + virtualbox + chef-solo + git + ec2Dev ninja  -> vagrant + virtualbox + chef-solo + git + ec2
Dev ninja -> vagrant + virtualbox + chef-solo + git + ec2Yros
 
IaaS: Implantação e gerenciamento de configurações de ambientes Cloud usando...
 IaaS: Implantação e gerenciamento de configurações de ambientes Cloud usando... IaaS: Implantação e gerenciamento de configurações de ambientes Cloud usando...
IaaS: Implantação e gerenciamento de configurações de ambientes Cloud usando...Diego Santos
 
Gestão automática de configuração usando puppet
Gestão automática de configuração usando puppetGestão automática de configuração usando puppet
Gestão automática de configuração usando puppetDaniel Sobral
 
Infraestrutura ágil com Puppet - CISL
Infraestrutura ágil com Puppet - CISLInfraestrutura ágil com Puppet - CISL
Infraestrutura ágil com Puppet - CISLJose Augusto Carvalho
 
Ferramentas para infraestrutura ágil
Ferramentas para infraestrutura ágilFerramentas para infraestrutura ágil
Ferramentas para infraestrutura ágilJose Augusto Carvalho
 
Aula 1 sistema operacional linux
Aula 1 sistema operacional linuxAula 1 sistema operacional linux
Aula 1 sistema operacional linuxRogério Cardoso
 
Php e mysql aplicacao completa a partir do zero
Php e mysql   aplicacao completa a partir do zeroPhp e mysql   aplicacao completa a partir do zero
Php e mysql aplicacao completa a partir do zeroFred Ramos
 

Destacado (11)

Mini-curso de Linux - SECCOMP 2009
Mini-curso de Linux - SECCOMP 2009Mini-curso de Linux - SECCOMP 2009
Mini-curso de Linux - SECCOMP 2009
 
Dev ninja -> vagrant + virtualbox + chef-solo + git + ec2
Dev ninja  -> vagrant + virtualbox + chef-solo + git + ec2Dev ninja  -> vagrant + virtualbox + chef-solo + git + ec2
Dev ninja -> vagrant + virtualbox + chef-solo + git + ec2
 
IaaS: Implantação e gerenciamento de configurações de ambientes Cloud usando...
 IaaS: Implantação e gerenciamento de configurações de ambientes Cloud usando... IaaS: Implantação e gerenciamento de configurações de ambientes Cloud usando...
IaaS: Implantação e gerenciamento de configurações de ambientes Cloud usando...
 
Git Básico
Git BásicoGit Básico
Git Básico
 
Gestão automática de configuração usando puppet
Gestão automática de configuração usando puppetGestão automática de configuração usando puppet
Gestão automática de configuração usando puppet
 
Infraestrutura ágil com Puppet - CISL
Infraestrutura ágil com Puppet - CISLInfraestrutura ágil com Puppet - CISL
Infraestrutura ágil com Puppet - CISL
 
Ferramentas para infraestrutura ágil
Ferramentas para infraestrutura ágilFerramentas para infraestrutura ágil
Ferramentas para infraestrutura ágil
 
GIT Básico
GIT BásicoGIT Básico
GIT Básico
 
Firewall linux virtual para windows
Firewall linux virtual para windowsFirewall linux virtual para windows
Firewall linux virtual para windows
 
Aula 1 sistema operacional linux
Aula 1 sistema operacional linuxAula 1 sistema operacional linux
Aula 1 sistema operacional linux
 
Php e mysql aplicacao completa a partir do zero
Php e mysql   aplicacao completa a partir do zeroPhp e mysql   aplicacao completa a partir do zero
Php e mysql aplicacao completa a partir do zero
 

Similar a PHP: Introdução à programação

PHP - Uma Pequena Introducao
PHP - Uma Pequena IntroducaoPHP - Uma Pequena Introducao
PHP - Uma Pequena Introducaojonatasoliveira
 
Desenvolvimento Web Avançado usando PHP
Desenvolvimento Web Avançado usando PHPDesenvolvimento Web Avançado usando PHP
Desenvolvimento Web Avançado usando PHPelliando dias
 
Memcached, Gearman e Sphinx
Memcached, Gearman e SphinxMemcached, Gearman e Sphinx
Memcached, Gearman e SphinxElton Minetto
 
Desenvolvendo aplicativos web escaláveis
Desenvolvendo aplicativos web escaláveisDesenvolvendo aplicativos web escaláveis
Desenvolvendo aplicativos web escaláveisManuel Lemos
 
Melhorando a performance de aplicações com o uso do MemCache
Melhorando a performance de aplicações com o uso do MemCacheMelhorando a performance de aplicações com o uso do MemCache
Melhorando a performance de aplicações com o uso do MemCacheElton Minetto
 
Otimização e Escalabilidade
Otimização e EscalabilidadeOtimização e Escalabilidade
Otimização e Escalabilidademetzen
 
Python Mini Curso V0812
Python Mini Curso V0812Python Mini Curso V0812
Python Mini Curso V0812Luiz Aldabalde
 
5 Maneiras de melhorar seu código PHP
5 Maneiras de melhorar seu código PHP5 Maneiras de melhorar seu código PHP
5 Maneiras de melhorar seu código PHPAugusto das Neves
 
Aula 02 - Introdução ao PHP - Programação Web
Aula 02  - Introdução ao PHP - Programação WebAula 02  - Introdução ao PHP - Programação Web
Aula 02 - Introdução ao PHP - Programação WebDalton Martins
 
Scala - Uma Breve (breve mesmo) Introdução
Scala - Uma Breve (breve mesmo) IntroduçãoScala - Uma Breve (breve mesmo) Introdução
Scala - Uma Breve (breve mesmo) Introduçãopaulosuzart
 
Escrevendo códigos php seguros
Escrevendo códigos php segurosEscrevendo códigos php seguros
Escrevendo códigos php segurosDouglas V. Pasqua
 
Integração Contínua com CruiseControl e phpUnderControl
Integração Contínua com CruiseControl e phpUnderControlIntegração Contínua com CruiseControl e phpUnderControl
Integração Contínua com CruiseControl e phpUnderControlDiego Tremper
 
Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2PrinceGuru MS
 
Adianti Framework PHPConf 2013
Adianti Framework PHPConf 2013Adianti Framework PHPConf 2013
Adianti Framework PHPConf 2013Pablo Dall'Oglio
 
Programando para programadores: Desafios na evolução de um Framework
Programando para programadores: Desafios na evolução de um FrameworkProgramando para programadores: Desafios na evolução de um Framework
Programando para programadores: Desafios na evolução de um FrameworkPablo Dall'Oglio
 

Similar a PHP: Introdução à programação (20)

PHP - Uma Pequena Introducao
PHP - Uma Pequena IntroducaoPHP - Uma Pequena Introducao
PHP - Uma Pequena Introducao
 
Desenvolvimento Web Avançado usando PHP
Desenvolvimento Web Avançado usando PHPDesenvolvimento Web Avançado usando PHP
Desenvolvimento Web Avançado usando PHP
 
Memcached, Gearman e Sphinx
Memcached, Gearman e SphinxMemcached, Gearman e Sphinx
Memcached, Gearman e Sphinx
 
Desenvolvendo aplicativos web escaláveis
Desenvolvendo aplicativos web escaláveisDesenvolvendo aplicativos web escaláveis
Desenvolvendo aplicativos web escaláveis
 
Aula 01 - Curso PHP e MySQL
Aula 01 - Curso PHP e MySQLAula 01 - Curso PHP e MySQL
Aula 01 - Curso PHP e MySQL
 
Melhorando a performance de aplicações com o uso do MemCache
Melhorando a performance de aplicações com o uso do MemCacheMelhorando a performance de aplicações com o uso do MemCache
Melhorando a performance de aplicações com o uso do MemCache
 
Security & PHP
Security & PHPSecurity & PHP
Security & PHP
 
Novidades do PHP 5.3 e 6
Novidades do PHP 5.3 e 6Novidades do PHP 5.3 e 6
Novidades do PHP 5.3 e 6
 
Otimização e Escalabilidade
Otimização e EscalabilidadeOtimização e Escalabilidade
Otimização e Escalabilidade
 
Python Mini Curso V0812
Python Mini Curso V0812Python Mini Curso V0812
Python Mini Curso V0812
 
5 Maneiras de melhorar seu código PHP
5 Maneiras de melhorar seu código PHP5 Maneiras de melhorar seu código PHP
5 Maneiras de melhorar seu código PHP
 
Aula 02 - Introdução ao PHP - Programação Web
Aula 02  - Introdução ao PHP - Programação WebAula 02  - Introdução ao PHP - Programação Web
Aula 02 - Introdução ao PHP - Programação Web
 
Scala - Uma Breve (breve mesmo) Introdução
Scala - Uma Breve (breve mesmo) IntroduçãoScala - Uma Breve (breve mesmo) Introdução
Scala - Uma Breve (breve mesmo) Introdução
 
Plack
PlackPlack
Plack
 
Escrevendo códigos php seguros
Escrevendo códigos php segurosEscrevendo códigos php seguros
Escrevendo códigos php seguros
 
Curso de Introdução - PHP
Curso de Introdução - PHPCurso de Introdução - PHP
Curso de Introdução - PHP
 
Integração Contínua com CruiseControl e phpUnderControl
Integração Contínua com CruiseControl e phpUnderControlIntegração Contínua com CruiseControl e phpUnderControl
Integração Contínua com CruiseControl e phpUnderControl
 
Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2
 
Adianti Framework PHPConf 2013
Adianti Framework PHPConf 2013Adianti Framework PHPConf 2013
Adianti Framework PHPConf 2013
 
Programando para programadores: Desafios na evolução de um Framework
Programando para programadores: Desafios na evolução de um FrameworkProgramando para programadores: Desafios na evolução de um Framework
Programando para programadores: Desafios na evolução de um Framework
 

Más de Caike Souza

Refactoring Ruby Code
Refactoring Ruby CodeRefactoring Ruby Code
Refactoring Ruby CodeCaike Souza
 
Comunidades Dinamicamente Tipadas
Comunidades Dinamicamente TipadasComunidades Dinamicamente Tipadas
Comunidades Dinamicamente TipadasCaike Souza
 
Coding Dojo Cesupa
Coding Dojo CesupaCoding Dojo Cesupa
Coding Dojo CesupaCaike Souza
 

Más de Caike Souza (6)

Refactoring
RefactoringRefactoring
Refactoring
 
Refactoring Ruby Code
Refactoring Ruby CodeRefactoring Ruby Code
Refactoring Ruby Code
 
Comunidades Dinamicamente Tipadas
Comunidades Dinamicamente TipadasComunidades Dinamicamente Tipadas
Comunidades Dinamicamente Tipadas
 
Refactoring
RefactoringRefactoring
Refactoring
 
Coding Dojo
Coding DojoCoding Dojo
Coding Dojo
 
Coding Dojo Cesupa
Coding Dojo CesupaCoding Dojo Cesupa
Coding Dojo Cesupa
 

PHP: Introdução à programação

  • 1. PHP: Programação para Seres Humanos Carlos Henrique R. de Souza XX.Sepai.Belém.PA Outubro de 2006
  • 2. Agenda Objetivo  Paradigmas  A Web  O que é PHP / PHP­CLI / PHP­GTK  Características / Fatos  Primeiros passos  IDE   Orientação a Objetos  Frameworks  CMS  Segurança  Conclusões 
  • 3. Objetivo Desenvolvimento em PHP  Iniciantes em PHP  Iniciantes em outras linguagens  Alunos de cursos técnicos  / graduaçao em TI  Entusiastas  Quando usá­lo  Quando não usá­lo  
  • 4. Paradigmas Client­Side   Vantagens:  Alicerce robusto  Controle sobre os recursos  Liberdade local  Desvantagens:  Desenvolvimento ‘do zero’  Liberdade local  Bugfix 
  • 5. Paradigmas Server­Side 
  • 6. Paradigmas Server­Side   Vantagens:  Interface pré­modelada  Maior acessibilidade  Bugfix  Desvantagens:  Pouca (quase nenhuma) informação sobre cliente  Preocupação com tráfego  Popularização no desenvolvimento de aplicações 
  • 7. A Web Total Sites Across All Domains August 1995 ­ October 2006  Em novembro de 1992 – 26 servidores web fonte: netcraft  Em outubro de 2006 – 98 milhões de ‘hostnames’  “A internet náo é uma rede de computadores, mas sim de pessoas”
  • 8. O que é PHP ? Uma linguagem de programação open­  source e de propósitos­gerais Criada por Rasmus Lerdof em 1995 (PHP/FI)  Reescrita por Andi Gtmans e Zeev Suraszi   (Zend) em 1997 – PHP3 Utilizada especialmente para   desenvolvimento web (procedural e/ou OO) Misturada com HTML  TODO código PHP é interpretado no servidor 
  • 9. O que é PHP ? arquivo.php (no servidor)  <html> <p><b><? echo “Olá, Mundo!” ?></b></p> </html> arquivo.php (no cliente)  <html> <p><b>Olá, Mundo!</b></p> </html>
  • 10. O que é PHP ? PHP­CLI  Command Line Interpreter  Uso similar a bash, perl, awk  Client­Side  Cron tasks  #!/usr/bin/php –q <? echo “PHP aqui também!”; ?>
  • 11. O que é PHP ? PHP­GTK  Gimp Tool Kit  Bibliotecas escritas em C  Client/Server­Side  Cross­platform 
  • 12. Características Independente de Plataforma  Linux, HP­UX, Mac OS X, Win32 (NT/W95/W98/W2000),   BeOS, Solaris Servidores  Apache, MS­IIS / PWS, Xitami  Suporte nativo a diversos SGBDs  Adabas D, dBase, Empress, FilePro (apenas leitura),   Hyperware, IBM DB2, Informix, Ingres, Interbase,  FrontBase, mSQL, Direct MS­SQL, MySQL, ODBC, Oracle  (OCI7 e OCI8), Ovrimos, PostgreSQL, SQLite, Solid,  Sybase, Velocis, Unix dbm
  • 13. Características Extensões:  GD (imagens), LDAP, SNMP, SOAP, IMAP, FTP,   MCAL, IMSP, Java, Curl, gettext, SWF, CCVS,  zlib, etc...
  • 14. Características Tipagem dinâmica (‘duck’ typing) e   conversão automática If ( funcao_foo($arg_foo) ) { ... fazer algo ... } Funções suficientes! tipo int ou String 
  • 15. Características Integração com outras linguagens  (Java, Perl, MS.net , etc.)  public class JavaPHP {     private String nome = null;     public void setNome(String nome) {         this.nome = nome;     }     public String getNome() {         return nome;     } } <? $javaPHP = new Java('JavaPHP'); $javaPHP->setNome(quot;Java+PHPquot;); echo quot;Método do Java = quot; . $javaPHP->getNome(); ?> ex: PHPBrasil
  • 16. Características Sintaxe simples, semelhante a Perl e C  Perl: $conn = Pg::connectdb(quot;dbname=foo host=localhost user=root password=123quot;); PHP: $conn = pg_connect(quot;host=localhost dbname=foo user=root password=123quot;) Otimizadores  APC, Zend Optimizer, Turck MMCache 
  • 17. Características Arrays  Ordenados  <?  $vetor[0] = “primeiro”; $vetor[1] = “segundo”; $vetor[] = “terceiro”;  ?> Associativos  <?  $vetor[‘caike’] = “php”; $vetor[‘jamesgoslin’] = “java”; $vetor[‘joselito’] = “asp”;  ?> 48 funções para array 
  • 18. Fatos 19.491.324 Domains  1.313.977 IP Addresses  fonte: netcraft
  • 20. Fatos fonte: nexen
  • 21. Primeiros Passos Opção 1: LAMP  Linux com APT­GET  apt­get install apache2 php5 mysql­server php5­mysql   mysql­query­browser Compilações e instalações independentes  Opção 2: WAMP  EasyPHP (7.7mb)  Instalações independentes 
  • 22. IDEs Open­Source:  Eclipse (PHPEclipse, PHP­IDE), Tulip,   PHPDesigner Proprietárias:  Zend Studio, Dreamweaver 
  • 23. Orientação a Objetos Inspiraçao no mundo real  Introduzida no PHP 3  Reescrita para o PHP 4, mas ainda   insuficiente PHP5 = OO madura e similar a outras   linguagens
  • 24. Orientação a Objetos construtores e destrutores padrão  class BD{ var $conn; function __construct($host, $user, $pw){ $this­>conn = mysql_connect($host,$user,$pw); } function __destruct($host, $user, $pass){ mysql_close($this­>conn) ; } }
  • 25. Orientação a Objetos modificadores de acesso  public  private  protected  class Funcionario {  public $nome; protected $telefone; private $salario; } 
  • 26. Orientação a Objetos __set(), __get(), __call()  class Pessoa {   private $dt_nascimento;   function __set($atributo, $valor){     if($atributo == quot;dt_nascimentoquot;){    $dt_nascimento = implode(quot;­quot;,array_reverse(explode(quot;/quot;,$valor))); }     } } $p1 = new Pessoa(); $p1­>dt_nascimento = quot;03/09/1984quot;; // ... dt_nascimento = 1984­09­03
  • 27. Orientação a Objetos __set(), __get(), __call()  class Conta {   private $saldo;   private $limite = 100;   function setSaldo() ...   function __get($at){    if($at == “saldo”) return $this­>saldo + $this­>limite;   } } $p1 = new Conta(); $p1­>setSaldo(200); echo $p1­>saldo; // 300
  • 28. Orientação a Objetos __set(), __get(), __call()  class Guitarra {   private $cordas;   private $captadores;   function __call($metodo, $args){    echo quot;@#&!! $metodo não existe para a classe guitarra !quot;;   } } $a = new Guitarra(); $a­>tocarUmPagodao();
  • 29. Orientação a Objetos interfaces  interface IPessoa{ function fazerObrigacoes(); function seDivertir(); }
  • 30. Orientação a Objetos interfaces  class Garoto implements IPessoa{ private $obrigacoes = false; function fazerObrigacoes(){ echo “Fazer meu dever de casa”; $this­>obrigacoes = true; } function seDivertir(){ echo “Jogar playstation”; } function getObrigacoes(){ return $this­>obrigacoes; } }
  • 31. Orientação a Objetos interfaces  class Adulto implements IPessoa{ private $obrigacoes = false; function fazerObrigacoes(){ echo “Trabalhar para pagar o PS do meu filho”;  $this­>obrigacoes = true; } function seDivertir(){ echo “Verei o Papão jogar!”; } function getObrigacoes(){ return $this­>obrigacoes; } }
  • 32. Orientação a Objetos interfaces  class Deus{ function julgar(IPessoa $p){ if(!$p­>getObrigacoes()){ echo “Faça já suas obrigações!”; $p­>fazerObrigacoes(); } $p­>setDivertir(); } }
  • 33. Orientação a Objetos interfaces  $objPessoa1 = new Garoto(); Deus::julgar($objPessoa); Fazer meu dever de casa Jogar playstation $objPessoa2 = new Adulto(); Deus::julgar($objPessoa2); Trabalhar para pagar o PS do meu filho Verei o Papão jogar
  • 34. Orientação a Objetos classes e métodos abstratos  propriedades estáticas  clonagem  manipulação de erros (try/catch) 
  • 35. Frameworks Genial, ClassGenerator, MetaClass, Smarty,   PRADO, CakePHP, Symfony, etc. “ Não reinvente a roda, mas saiba como ela   foi feita ”
  • 36. Content Management System (CMS) Portais:  Joomla, Mambo, PHP­Nuke, etc ...  Blogs:  Wordpress, simplog  eCommerce:  phpShop, XT­Commerce  GroupWare:  NetOffice, PHPGroupWare 
  • 37. Segurança SQLInjection  XSS  Engenharia Social  
  • 38. SQL Injection Manipulação dos scripts SQL  $sql= “... WHERE nome = `$_POST[`nome`]` AND senha = ‘$_POST[`senha`]`”; Login: bla’ or 1 = 1 – Senha: 123 $sql =  “... WHERE nome = ‘bla’ or 1 =1 ­­ ` AND senha = ‘123`”; Sempre validar entrada, SEMPRE! 
  • 39. SQL Injection Ajudam a evitar ataques de SQLInjection:  addslashes  mysql_real_escape_string  magic_quotes 
  • 40. Cross-Site Scripting (XSS) Informação de um contexto (não­confiável) é inserida   em outro contexto Link em um e­mail: Fotos daquela sua amiga na festa  <a href =  quot;http://xpto.com/?param=<script>...</script>”> Fotos daquela sua amiga na festa </a> <a href = “http://tinyurl.com/y6tz8”> Fotos daquela sua amiga na festa </a>
  • 41. Cross-Site Scripting (XSS) Ajudam a evitar ataques de XSS  strip_tags  htmlentities  Sempre validar entrada e SAÍDA! 
  • 42. Engenharia Social Independente de tecnologia  Caso Paris Hilton  Caso Harvard Business School  “ Não existe patch para falha humana...” 
  • 43. Conclusões PHP – programação para seres­humanos e   situações humanas no planeta Terra ! “ Quando tudo que se tem é um martelo... ” 
  • 44. Fim Referências  www.php.net  www.netcraft.com  www.opensourcecms.com  www.nexen.net  www.tiobe.com  http://ref.web.cern.ch/ref/CERN/CNL/2001/001/www­history/  Contato  carloshrsouza@equilibriumweb.com  www.equilibriumweb.com  www.step2rock.com  Grupo  phppaidegua­subscribe@yahoogroups.com 