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:
<?php class ClasseExemplo { // declaração da variável public $var = 'Olá Mundo'; // declaração do método public function exibeVar() { echo $this->var; } } $classe = new ClasseExemplo(); $classe->exibeVar(); ?>
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:
<?php class MinhaClasse { public $public = 'Public'; protected $protected = 'Protected'; private $private = 'Private'; // método public (nao precisa por public, mas é recomendável) function oi() { echo $this->public; echo $this->protected; echo $this->private; } } $obj = new MinhaClasse(); echo $obj->public; // Funciona echo $obj->protected; // Fatal Error echo $obj->private; // Fatal Error $obj->oi(); // Exibe Public, Protected e Private class MinhaClasse2 extends MinhaClasse { // Pode-se declarar o public e o protected métodomas não o private protected $protected = 'Protected2'; public function oi() { echo $this->public; echo $this->protected; echo $this->private; } } $obj2 = new MinhaClasse2(); echo $obj2->public; // Funciona echo $obj2->private; // Undefined echo $obj2->protected; // Fatal Error $obj2->oi(); // Exibe Public, Protected2, não Private ?>
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:
<?php class Foo { public static $eu_static = 'foo'; public function valorStatic() { return self::$eu_static; } } print Foo::$eu_static; // foo $obj = new Foo(); $obj->valorStatic(); // foo ?>
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:
<?php class BaseClass { public function __construct() { print "Chamou o construtor\n"; } } $obj = new BaseClass(); ?>
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).
<?php class BaseClass { public function __construct($eu) { print "Chamou o construtor e meu nome é ".$eu."\n"; } } $obj = new BaseClass("Felipe"); ?>
E o destrutivo faz exatamente o contrario. Ele é rodado quando a classe é fechada ou quando todos as referencias de um objeto particular for removido.
<?php class ClasseSuicida { private nome; public function __construct() { print "Construindo\n"; $this->nome = "ClasseSuicida"; } public function __destruct() { print "Destruindo " . $this->nome . "\n"; } } $obj = new ClasseSuicida(); ?>
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


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
Adorei o artigo. Foi muitissimo importante pra mim. Parabéns
Muito bom artigo. Certamente vai ajudar as pessoas a desmistificar OOP dentro do PHP. Parabéns!
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++ ????
qual a vantagem de utilizar php4 ?
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
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
Muito bom o artigo. Foi claro e objetivo.
Eu tinha muitas duvidas, e foram esclarecidas.
Abraço!
Cara!!! Você tem o dom de enssinar, muito boa explicação a
o nevoeiro q tinha na minha frente desapareceu!
Deus abençoe!
Alux
gostaria de saber como cadastrar um aimgen no bd mysql e exibila unsando o php?.
gostaria de saber como cadastrar um imagens e comentario no bd mysql e exibila unsando o php?.
that's why it will never wor. Nurit Hailey.
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 !
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
Você sabe como usar as variaveis globais do PHP 5
David,
para usar variáveis globais é só usar o 'global' antes de declarar a variável.
Exemplo:
function teste()
{
global $variavel;
echo $variavel;
}
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
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
Mesmo simples, gostei, foi ao ponto.
uma pergunta pq o $ não é colocado com vai imprimir a varialvel ..
Precisa sim, só que você já usou ela antes no "ponteiro" $this.
Parabens isso realmente ajuda muito.
Abraços
Artigo Excelente!!
PArabéns!! .. claro e bem objetivo.
Felipe,
Seu artigo está realmente muito bom!! É uma pincelada onde abranje os princípais tópicos do PHP 5.
Muito bom Parabens!!
estava procurando exatamente esse tipo de explicação> Muito bom mesmo! Parabéns.
quanto a tutoriais, aqui vai um bom site:
http://www.w3schools.com
Não só pra php, vale dar uma olhada
Bom dia fiz o ultmi exemplo da classe suicida e deu o seguinte erro
Parse error: syntax error, unexpected T_STRING, expecting T_VARIABLE in /home/bianor/public_html/ClasseSuicida.php on line 4
Alexandre Alux diz : o nevoeiro q tinha na minha frente desapareceu !!!!
Eu o mesmo , otimo , fantastico , depois de tempos consegui entender !!!
Obrigado.
Obs : Coloca aquele plugin para poder transformar seus post em PDF e salvar !!! sao otimos, merecem estar em meu HD !!!
Show de bola ...
Felicidade!