PHP: Entendendo o PHP5

Tags:
Postado em Desenvolvimento WEB, PHP, Tutoriais por Felipe Tonello on the May 15th, 2006


Ajude a Combater o Spam! Clique aqui!

Mesmo o PHP5 sendo lançado a um bom tempo já, e também ja sabemos que irá lançar o PHP6, muitas pessoas não sabem realmente a principal diferença entre o PHP5 e o PHP4(ou anteriores). Com esse artigo eu irei mostrar as principais mudanças.

A principal mudança do PHP5 é a Orientação a Objetos. No PHP5 os engenheiros do Zend reescreveram toda o modulo de orientação a objetos para melhor performance e mais poder também na linguagem.

Aqui vou mostrar a como usar essas novas funções e como aplica-las(vou ser bem objetivo, sem balblalb).

Uma classe no PHP funciona assim:

  1. <?php
  2. class ClasseExemplo
  3. {
  4.     // declaração da variável
  5.     public $var = ‘Olá Mundo’;
  6.     // declaração do método
  7.     public function exibeVar()
  8.     {
  9.         echo $this->var;
  10.     }
  11. }
  12. $classe = new ClasseExemplo();
  13. $classe->exibeVar();
  14. ?>

Essa é uma classe exemplo onde que podemos notar algumas regras:

  • Declação de varivel da classe(que poderá usar em vários metodos da mesma classe)
  • Declaração do método
  • Declarar a prioridade de acesso do método e da variável
  • Para chamar a classe você usa sintaxe $variavel = new NomeClasse();

Caso alguém já trabalhou com C++ ou Java, irá notar grande similaridade. Caso não, vamos as explicações:
Toda variável que será usada em diversos métodos(global) tem que ser declarada na classe e não no método. O método na verdade é mesma coisa que a função, mas por questão de nomenclatura a função dentro de uma classe se chama método.

Toda variável global ou método tem que ter uma prioridade(visibilidade). O que é isto?
Essa prioridade é quem vai mostrar para a classe se outra classe, ou se outros métodos ou se fora da classe você poderá chamar ela. Isso vale tanto pra métodos ou variáveis. Mas como assim?

Vou mostrar os tipos de prioridades que temos e assim os exemplos para vocês entenderem melhor. A visibilidade se aplica tanto para métodos quanto para variáveis.

Visibilidade e Classes Filhas

Existem 3 tipos: Public(publico), Protected(protegida), Private(privada).

Public - Publico. Você pode acessa-la dentro e fora da classe. Mais comum entre os métodos
Protected - Você pode acessa-la somente na Classe ou em suas classes filhas. Não tao comum.
Private - Você pode acessar somente dentro da classe. Mais comum nas variáveis.

Exemplo:

  1. <?php
  2. class MinhaClasse
  3. {
  4.     public $public = ‘Public’;
  5.     protected $protected = ‘Protected’;
  6.     private $private = ‘Private’;
  7.  
  8.     // método public (nao precisa por public, mas é recomendável)
  9.     function oi()
  10.     {
  11.         echo $this->public;
  12.         echo $this->protected;
  13.         echo $this->private;
  14.     }
  15. }
  16.  
  17. $obj = new MinhaClasse();
  18. echo $obj->public; // Funciona
  19. echo $obj->protected; // Fatal Error
  20. echo $obj->private; // Fatal Error
  21. $obj->oi(); // Exibe Public, Protected e Private
  22.  
  23.  
  24. class MinhaClasse2 extends MinhaClasse
  25. {
  26.     // Pode-se declarar o public e o protected métodomas não o private
  27.     protected $protected = ‘Protected2′;
  28.     public function oi()
  29.     {
  30.         echo $this->public;
  31.         echo $this->protected;
  32.         echo $this->private;
  33.     }
  34. }
  35.  
  36. $obj2 = new MinhaClasse2();
  37. echo $obj2->public; // Funciona
  38. echo $obj2->private; // Undefined
  39. echo $obj2->protected; // Fatal Error
  40. $obj2->oi(); // Exibe Public, Protected2, não Private
  41. ?>

Nesse exemplo está mais claro de entender como funciona a visibilidade do PHP. Mas pode ter certeza que nunca é tão complicado, sempre é bem simples, as variáveis normalmente são private e os métodos public.

E notamos também alí a classe filha(parente, estendida). Ela é uma classe que pertence a classe mãe, no caso a MinhaClasse, e os métodos protected funcionam nela também.

Static

Existe um modo também de acessar algum método/variável de uma classe sem precisar instância-la. É declarando o método ou variável como static(estática) ou se for uma constante também.

Exemplo:

  1. <?php
  2. class Foo
  3. {
  4.    public static $eu_static = ‘foo’;
  5.  
  6.    public function valorStatic()
  7.    {
  8.       return self::$eu_static;
  9.    }
  10. }
  11.  
  12. print Foo::$eu_static; // foo
  13.  
  14. $obj = new Foo();
  15. $obj->valorStatic(); // foo
  16. ?>

Construtor e Destrutor

O método construtor é rodado quando a classe é instânciada. Ele serve para caso você queira que, por padrão quando instânciar a classe, ela faça algo já automático. Se em sua classe não contenha o método construtor o PHP irá procurar pelo nome de um método igual ao nome da classe, como é feito em Java por exemplo.

Sintaxe: void __construct ([void])

Exemplo:

  1. <?php
  2. class BaseClass
  3. {
  4.     public function __construct()
  5.     {
  6.         print "Chamou o construtor\n";
  7.     }
  8. }
  9. $obj = new BaseClass();
  10. ?>

O método construtor também pode conter parâmetros. Esses parâmetros são passados quando você constrói a classe(instância ela).

  1. <?php
  2. class BaseClass
  3. {
  4.     public function __construct($eu)
  5.     {
  6.         print "Chamou o construtor e meu nome é ".$eu."\n";
  7.     }
  8. }
  9. $obj = new BaseClass("Felipe");
  10. ?>

E o destrutivo faz exatamente o contrario. Ele é rodado quando a classe é fechada ou quando todos as referencias de um objeto particular for removido.

  1. <?php
  2. class ClasseSuicida
  3. {
  4.     private nome;
  5.  
  6.     public function __construct()
  7.     {
  8.         print "Construindo\n";
  9.         $this->nome = "ClasseSuicida";
  10.     }
  11.  
  12.     public function __destruct()
  13.     {
  14.         print "Destruindo " . $this->nome . "\n";
  15.     }
  16. }
  17.  
  18. $obj = new ClasseSuicida();
  19. ?>

Aê galera… Eu aqui comentei algo sobre a orientação a objeto. É claro que abrange muito mais coisas mas aqui eu citei o básico e o que vocês tem que aprender para começar a mexer com isso.

Comentem aê e postem dúvidas! Abraços

24 Comentários para 'PHP: Entendendo o PHP5'

Assine os comentários RSS ou TrackBack para 'PHP: Entendendo o PHP5'.

  1. alfredo disse,

    em September 18th, 2006 às 8:13 am

    boa explicação agradecia que me arranja-se algum local onde poderei arranjar tutoriais ou apostilas de php5 orientado a objectos, ou me envia-se para o mail os respectivos files

  2. mrzion disse,

    em October 16th, 2006 às 9:30 am

    Adorei o artigo. Foi muitissimo importante pra mim. Parabéns

  3. em November 12th, 2006 às 7:15 pm

    Muito bom artigo. Certamente vai ajudar as pessoas a desmistificar OOP dentro do PHP. Parabéns!

  4. jho disse,

    em December 7th, 2006 às 8:38 am

    Como faço pra fazer um arquivo só com os readers e um outro só com a implementação, tipo o .h e o .cpp do c++ ????

  5. lourdes disse,

    em December 18th, 2006 às 3:12 pm

    qual a vantagem de utilizar php4 ?

  6. Antonio Nascimento disse,

    em December 28th, 2006 às 11:44 am

    Tutorial interessante para iniciantes, mas se vc quiser algo bem mais completo esse é o melhor tutorial de php 5 que encontrei
    http://www.fop.unicamp.br/informatica/index.php?option=com_docman&task=doc_view&gid=3&Itemid=36

  7. em January 31st, 2007 às 12:59 am

    Fala Felipe, td blz ???

    Entao, o email que vc me passou do directnet nao ta funfando, ele voltou …

    Qual é o seu do msn?

    Abraço

  8. David disse,

    em March 22nd, 2007 às 3:40 pm

    Usando Mozilla Firefox Mozilla Firefox 2.0.0.2 no Ubuntu Linux Ubuntu Linux

    Muito bom o artigo. Foi claro e objetivo.
    Eu tinha muitas duvidas, e foram esclarecidas.
    Abraço!

  9. em May 30th, 2007 às 4:08 am

    Usando Mozilla Firefox Mozilla Firefox 2.0 no Windows Windows XP

    Cara!!! Você tem o dom de enssinar, muito boa explicação a
    o nevoeiro q tinha na minha frente desapareceu! :)

    Deus abençoe!
    Alux

  10. carlos disse,

    em August 20th, 2007 às 12:38 pm

    Usando Internet Explorer Internet Explorer 6.0 no Windows Windows XP

    gostaria de saber como cadastrar um aimgen no bd mysql e exibila unsando o php?.

  11. carlos disse,

    em August 20th, 2007 às 12:42 pm

    Usando Internet Explorer Internet Explorer 6.0 no Windows Windows XP

    gostaria de saber como cadastrar um imagens e comentario no bd mysql e exibila unsando o php?.

  12. Nurit Hailey disse,

    em September 19th, 2007 às 2:20 pm

    Usando Unknown browser

    that’s why it will never wor. Nurit Hailey.

  13. Rubens disse,

    em October 2nd, 2007 às 11:49 pm

    Usando Mozilla Firefox Mozilla Firefox 2.0.0.7 no Windows Windows XP

    Felipe parabens por esse exemplicação de OO no PHP, muito boa gostei, estava dando uma olhada por cima no teu blog gostei nos temas que você aborda (programação para WEB). Se estiver afim de conversar pegue meu msn rubensgarcia474@hotmail.com. A antes de me esquecer eu queria agradecer sua visita ao meu blog e a indicação do artigo ao delicious !

  14. em October 4th, 2007 às 2:14 pm

    Usando Mozilla Firefox Mozilla Firefox 2.0.0.6 no Linux Linux

    Olá Rubens,

    Obrigado você pelo comentário. E continue ativo na comunidade!
    Sempre que der, passe por aqui, ou assine meu feed para ficar por dentro das últimas =P

    Abraços

  15. David disse,

    em October 15th, 2007 às 8:48 pm

    Usando Mozilla Firefox Mozilla Firefox 2.0.0.7 no Windows Windows XP

    Você sabe como usar as variaveis globais do PHP 5

  16. em November 2nd, 2007 às 10:29 am

    Usando WordPress WordPress 2.1.3

    [...] Entendendo o PHP5 [...]

  17. em November 20th, 2007 às 9:45 pm

    Usando Mozilla Firefox Mozilla Firefox 2.0.0.8 no Linux Linux

    David,
    para usar variáveis globais é só usar o ‘global’ antes de declarar a variável.
    Exemplo:


    function teste()
    {
    global $variavel;
    echo $variavel;
    }

  18. David disse,

    em December 28th, 2007 às 7:14 pm

    Usando Internet Explorer Internet Explorer 7.0 no Windows Windows XP

    ja percebi q vc entende muito de PHP e tenho um problema q se possivel gostaria q vc me ajudasse a resolver: estou fazendo um script onde estou usando IF e preciso colocar 2 condições no IF exemplo: IF(a==b, c>a){…

    mas quando faço isso da um erro e diz q é justamente na linha desse IF.

    ja andei perguntando a alguns programadores em PHP e eles disseram q isso é possivel mas ai quando vi q ñ tava dando certo penssei q poderia ser a versão do PHP, eu estou usando a 4.3.10 será q esse tipo de IF so pode ser usado na versão 5 do PHP? se vc souber por favor me responda, qualquer coisa ai vai meu e-mail se vc quiser mando meu código pra vc analisar: davidmkt@gmail.com

    ficarei muito grato pela sua ajuda!!

    aguardo resposta mas desde já obg!!

    David Lima

  19. em December 29th, 2007 às 1:09 pm

    Usando Mozilla Firefox Mozilla Firefox 2.0.0.11 no Windows Windows XP

    David,

    Claro que pode, e quantas vezes você quiser. É só usar o operador && ou a palavra reservada and.
    Mas eu recomendo usar o && por questão de semântica.

    Exemplo:
    if(a == b && c > a)

    Abraços,
    Felipe Tonello

  20. kayo disse,

    em February 21st, 2008 às 12:47 am

    Usando Safari Safari 523.12 no Mac OS Mac OS X

    Mesmo simples, gostei, foi ao ponto.

  21. luan disse,

    em July 21st, 2008 às 7:22 pm

    Usando Internet Explorer Internet Explorer 6.0 no Windows Windows XP

    uma pergunta pq o $ não é colocado com vai imprimir a varialvel ..

  22. em July 22nd, 2008 às 11:01 am

    Usando Mozilla Firefox Mozilla Firefox 3.0.1 no Windows Windows XP

    Precisa sim, só que você já usou ela antes no “ponteiro” $this.

  23. em October 8th, 2008 às 4:53 pm

    Usando WordPress WordPress 2.6.2

    [...] Fonte: FelipeTonello [...]

  24. Demondark disse,

    em October 11th, 2008 às 1:05 am

    Usando Mozilla Firefox Mozilla Firefox 3.0.3 no Windows Windows XP

    Parabens isso realmente ajuda muito.
    Abraços

Comente!