Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Fala galera aqui vai mais um cursinho depois do tópico Introdução a Classes.
Nessa segundo parte vamos aprender a como manusear e trabalhar com classes, antes de mais nada é recomendado que você de uma lida no primeiro tópico que eu criei. http://forum.imasters.com.br/index.php?showtopic=167562
Bem vamos lá.
Curso: Trabalhando com Classes parte 2Professor: Erick Viana Leão (Perfect Lion)msn: erick_leao@hotmail.com <- adicionar com moderaçãosite: http://www.paodemugen.com.br
Já vimos como funciona classe e o que compõem uma classe correto? Agora você deve está pensando pó (Já sei como é uma classe e o que ela tem mais como eu uso essa “jabirosca”?)
É simples. Vou explicar uma classe de login e senha vamos criar ela do principio.
Atendes de mais nada precisamos cria uma tabela com os seguintes dados
Tbuser
Id (int:auto-numeric) || usuário (varchar(8)) || senha (varchar(32))
CREATE TABLE tbuser (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,usuario VARCHAR( 8 ) NOT NULL ,senha VARCHAR( 32 ) NOT NULL ) ENGINE = MYISAM CHARACTER SET latin1 COLLATE latin1_swedish_ci
Depois de termos criado nossa tabela agora vamos criar nossa classe login. Antes de mais nada vamos criar um arquivo chamado ‘config.php’ que será onde vai está configurado o as info de nosso banco de dados. Perseba que nela temos 1 classe chamada DB. So não criei um arquivo separado para ele para num complicar mais aqui ok. Vcs verão mais para frente como eu vou usar essa classe aqui.
Config.php
<?#:::::::::::::::::::::::::::::::::#:: Info Conexão BDdefine("DB_HOST","localhost");define("DB_USUARIO","root");define("DB_SENHA","");#::::::::::::::::::::::::::::::::::#:: Conectando com o DB$db_conect = mysql_connect(DB_HOST,DB_USUARIO,DB_SENHA);define("DB_CONNECT", $db_conect);#::::::::::::::::::::::::::::::::::#:: criação da classe DBclass DB{#:::::::::::::::::#:: função para fecha o banco de dados# protected function DBfecha(){ # para php5function DBfecha(){# para php4 mysql_close(DB_CONNECT);}#:::::::::::::::::#:: seleciona DBfunction DBseleciona($db){return mysql_select_db($db,DB_CONNECT); }}?>
temos que pensar o nome para essa classe sabemos que essa classe ele serve para autenticar uma conta de um usuário correto? Então podemos dar o nome de “login” e chamamos o arquivo de consiguração antes.
class_login.php
require ("config.php");class login{ }
Depois de termos já definido um nome para a classe agora vamos ver o que ela precisa como propriedade.
Sabemos que vamos está usando sempre o query de nossa consulta para poder usar ela depois certo? Então poque não criarmos uma propriedade chamada $return_query que vai sempre está armazenar o retorno da consulta correto? Depois disso vamos pensar e outra variável chama “total_query” porque total_query? Porque ela que ficara responsável por obter o total de resultado encontrado de nossas consultas.
class_login.php
require ("config.php");#::::::::::::::::::::::::::::::::::::#:: classe loginclass login{ # private $return_query; # para php5var $return_query; # para php4#protected $total_query; # para php5var $total_query; # para php4}
Pronto já temos a classe com suas propriedades... agora vamos ao seus métodos. Vamos criar um método logar() que é para o kra digitar o usuário e senha e fazer a consulta ok.. bora fazer.
O que vamos ter dentro desse método?
R: Vamos ter uma consulta que verifica o usuário e senha;
E ira retorna true ou false se a consulta foi feita com sucesso.
Então bora colocar em pratica.
class_login.php
require ("config.php")#::::::::::::::::::::::::::::::::::::#:: classe loginclass login{ # private $return_query; # para php5var $return_query; # para php4#protected $total_query; # para php5var $total_query; # para php4#:: criação da função logar();# public function logar($nome,$senha){ # para php5function logar($nome,$senha){ DBseleciona("dados"); $this->return_query = mysql_query("select * from tbuser where upper(nome) = '".strtoupper($nome)."' and senha = '$senha'"); return ($this->return_query)? true:false;}}
Pronto agora como iniciar isso? Lembra lá no primeiro curso? Certo então vamos fazer
class_login.php
require ("config.php")#::::::::::::::::::::::::::::::::::::#:: classe loginclass login{ # private $return_query; # para php5 var $return_query; # para php4 #protected $total_query; # para php5 var $total_query; # para php4 #:: criação da função logar(); # public function logar($nome,$senha){ # para php5 function logar($nome,$senha){ DBseleciona("test"); # chama a função que seleciona o DB $this->return_query = mysql_query("select * from tbuser where upper(usuario) = '".strtoupper($nome)."' and senha = '$senha'"); return ($this->return_query)? true:false; }}$logar = new login();echo $logar->logar("erick","12356");
Bem agora execute o arquivo class_login.php e veja o resultado.
“Pó erick que palhaçada é essa? Deu erro aqui de SQL o que ta acontecendo?
Olha ai o erro que ta aparecendo
Fatal error: Call to undefined function DBseleciona() in C:\root\test\conectdb\teste1.php on line X”
Calma isso é porque a função (método) DBseleciona() não existe dentro da classe login e nós criamos ela na classe DB que está dentro de nossa config.php lembra?
“Sim lembro mais como eu vou fazer para chamar ela então? Cria ela d novo?”
Não agora você faz o seguinte.. existe um comando em php na parte de classe que você faz com que suas classes elas se unem o chama Pai e Filho no nosso caso aqui o Pai será o “DB”então o nosso filho o “login”. Na vida real quando a pessoa quando nasce ela sempre herda características de seu pai ou mãe certo na classe funciona da mesma maneira... Então com o PHP5 existe visibilidades que nada mais é para proteger melhor a classe fazendo assim uma melhor organização entre ela. Então explicando a parte do PHP5 que estão comentados... onde é Privado quer dizer que aquele conteúdo pertence somente ao pai então o filho não herda essa característica aqui sendo representado como propriedade da classe.
Bem temo tbm a visibilidade Protected isso quer dizer que o conteúdo é protegido então ele não pode ser chamado fora de uma classe.. então o pai e o filho podem chamar ela atravez do comando “$this->” na frente.
E chegamos ao Public que é algo que todos tem.. imagina o mundo todo todos temos olhos, nariz essas coisa.. então é algo publico todos podemos ter então pode-se chamar os comando até fora da classe.. ^^
Aqui vai um exemplo de visibilidade
Tirado do PHP.net
<?php/** * Define MinhaClasse */class MinhaClasse{ public $publica = 'Public'; // aqui essa variável é publica protected $protegida = 'Protected'; // aqui essa variável é protegida private $privada = 'Private'; // aqui essa variável é privada function imprimeAlo() { echo $this->publica; // aqui ele imprime na tela o conteúdo da varivavel echo $this->protegida; // aqui ele imprime na tela o conteúdo da varivavel echo $this->privada; // aqui ele imprime na tela o conteúdo da varivavel }}$obj = new MinhaClasse();echo $obj->publica; // Aqui ele chama a variável publica fora da classe lembram que eu disse? Que ela podia ser chamado fora da classe? Ta ai aqui ele mostra o conteúdo da variavelecho $obj->protegida; // Aqui da erro porque como eu disse ela não pode ser chamada fora de sua classe lembra disso?echo $obj->privada; // Aqui tbm dá erro porque dá erro? Porque ela tbm não pode ser chamada a não ser dentro de sua classe$obj->imprimeAlo(); // Mostra Public, Protected e Private porque todas essas variáveis que constavam dentro de sua própria classe ela pode chamar.. então dentro dessa função eu chamei elas todas/** * Define MinhaClasse2 */class MinhaClasse2 extends MinhaClasse // aqui a classe2 ela estende de classe{ // Nós podemos redeclarar as propriedades públicas e protegidas mas não as privadas protected $protegida = 'Protected2'; // aqui como disse a frase logo acima ele pode redeclarar as propriedas ou funções que não são privadas caso você tente redeclarar uma private vai dar erro function imprimeAlo() { echo $this->publica; // aqui ele está imrpimindo o conteúdo da variável publica herdada de MinhaClasse aqui ele consegue resultado pois lembrando que public ele é livre.. fica mais fácil de entender. echo $this->protegida; // aqui ele imprime o valor que você definiu novamente que foi protected2 echo $this->privada; // aqui ele não tem como imprimir porque dá erro lembra que as únicas que o filho herda do pai são o public e o protected já o private somente é do pai. }}$obj2 = new MinhaClasse2();echo $obj2->publica; // aqui ele mostra o conteúdo pois como eu disse é public :Pecho $obj2->privada; // aqui não mostra porque o pai não deixa.. e a criança não herdo essa característica do pai.echo $obj2->protegida; // mesma coisa ele é protegido só pode ser manipulado dentro das classes ^^$obj2->imprimeAlo(); // Mostra Public, Protected2 e não Private como eu disse logo lá acima exmplicadno dentro dessa função o porque.?>
Bem fico claro essa parte de visibilidade?
“sim”
Legal bora continuar.
Bem então o que temos que fazer em nossa classe login?
“temos que fazer ela extender de DB para ela herda o método de seu pai?”
Isso mesmo boa garoto.. ta aprendendo em.. e depois?
“depois colocamos o $this-> na frente dessa função pois para informa que estamos chamando ela de dentro da classe ^^”
É isso ai garoto então mostra ai pro tio como que fica a classe login então.
“Ok”
require ("config.php")#::::::::::::::::::::::::::::::::::::#:: classe loginclass login extends DB{ # private $return_query; # para php5 var $return_query; # para php4 #protected $total_query; # para php5 var $total_query; # para php4 #:: criação da função logar(); # public function logar($nome,$senha){ # para php5 function logar($nome,$senha){ $this->DBseleciona("test"); # chama a função que seleciona o DB $this->return_query = mysql_query("select * from tbuser where upper(usuario) = '".strtoupper($nome)."' and senha = md5('123456')")or die(mysql_error()); $this->total_query = mysql_num_rows($this->return_query); return ($this->total_query > 0)? true:false; }}$logar = new login();echo $logar->logar("erick","12356");
Boa garoto...você executo o script agora? Rodo para ver o que ele mostra?
“sim”
É o que ele mostra na tela?
“0, porque?”
Bem Porque provavelmente você num tem nenhum cadastro em seu banco de dados com o usuario e a senha codificada em md5()
“ata, pronto adicionei .... agora sim ta aparecendo um numero 1”
Isso mesmo.. ele está informando que há um registro encontrado.. e retorno True.
Bem é isso ai galera o login feito.. e ao mesmo tempo aprendeu como trabalhar com classes.. bem nessa 2° aula é só isso até a próxima..
Duvidas postem logo abaixo ^^
Erick!!Você É O CAR@!!!!Mto bom, agora, evitar anti-ataque (lá do Fabyo) pra fica 101% bão!![]s e mto sucesso!
magician -> sim kra... eu faria a mesma coisa que você disse mais é que isso fica para um proximo tuto ^^ construtores e destrutores ^^ e valeu ai ^^ursolouco -> eu num sou o kra não veio :P o Fabão que é ^^ .. vamos dizer que eu ainda estou aprendendo ^^ valeu ai ;)
eae LittleLion (heheheh)muito otimo e completinho suas materias, complementando bem uma a outra, infelizmente nao deu tempo para ler ela inteira por eu estar no trampo, mas do que eu li ta otima... =DContinue assim que voce sabe que tem o apoio dos amigos (que nem sempre estao muito mais por aqui mas) que as vezes olham o forum do imasters hehe[]sPS: eu lembrei de uma musicaI like Very Much see u LittleLion (eu ingleisei, mas eh do caitano veloso se nao me engano)Eu gosto muito de lhe ver Leaozinho heheLuigi
HHaahaha valeu ai Luis vou ver se crio mais depois.. e que está corrigo aqui...
Pow cara é isso ai continue postando seus conheçimentos ai....Vamos phptizar todo mundo...Vlw mesmo, todos nós que estamos começando agradeçemos.
Bom seria o caso de usar os get e set da vida para não deixar que qualquer um possa modificar os dados do método correto...
Quero saber qual é o objetivo de criar classes extendidas.
Qual é o benefício que as classes extendidas podem trazer?
Se é para usar um método, por que não utiliza-lo apenas na classe pai ?
Orba bem as classes extended tem tem o obcitvo muito simples poupar trabalho :DExemplo:class Aclass B extends Abasicamente a class B vai ter os seu metodos e variaveis, e para alem disso va ter tambem todos o metodos e variaveis da class A, basicamente é isto, envolve mais coisas mas é isto.O beneficio axo que é obvio :DEm relação a utima pergunta nao percebi la muito bem :s
Edivaldo_Reis -> kra qual a finalidade de extender de outra classe.. como nosso amigo magician disse para poupar trabalho.. para que você vai recriar novamente um metodo que já foi criado para fazer a mesma coisa que você quer ? ai você não precisa criar classe já que você quer fazer isso sempre que precisar você vai lá e cria a função ... entende.. então não é preciso existir classe já que pensa dessa forma...A classe ela é para você poder reutilizar metodos e propriedades que você sempre vai está em contato com ele.. ^^
>
Quero saber qual é o objetivo de criar classes extendidas.
Qual é o benefício que as classes extendidas podem trazer?
Se é para usar um método, por que não utiliza-lo apenas na classe pai ?
http://forum.imasters.com.br/index.php?s=&...ndpost&p=587693
Pessoal essas duvidas se reunem numa só, o motivo de todas essas duvidas é que a maioria nao
entendeu o conceito sobre orientação a objetos, eu vejo que muitos pegam suas funções e joga dentro de class { }
e fala que ta programando em oop, o conceito de oop nao é isso.
pense desse modo, temos uma classe chamada Animal
com metodo respirar, dai extende uma classe mamifero do animal, logo entao o mamifero é um animal
que herda os metodos da classe animal entao o animal tbm respira.
O conceito de extender uma classe é simples, é herança. Você herda de
uma classe quando a sua classe é do tipo da outra.
Por exemplo... Todo mundo na empresa é um funcionario, mas o presidente
tem mais funcoes que o funcionario normal.. entao seria logico:
class Funcionario {
public $identificacao;
public $nome; // ja que todo funcionario tem um numero e um nome
}
class Presidente extendes Funcionario {
public function Contratar() { ... }
public function MandarEmbora() { ... }
}
Agora pense num avião. É composto de várias partes.. asas, rodas, flaps.
Não é porque seu aviao utiliza um flap que ele extende a classe flap.
Ele simplesmente utiliza o flap, ele é uma propriedade do avião (o avião
tem flaps).
Então lembre das frases associadas ao termo:
Metodo - Algo que se faz:
Presidente->MandarEmbora() - O presidente pode mandar alguem embora
Propriedade - Alguma informação pertinente ao objeto
Funcionario->Nome - O funcionario tem um nome
Herança - Indica que o objeto é do mesmo tipo do outro, e herda suas
caracteristicas
class Presidente extends Funcionario - O Presidente É um Funcionario
Perfeito fabão ^^ como sempre clareando mais a minha mente com as classes ^^
O PHP não aceita herança mútipla. Sendo assim, como posso criar uma classe extendida que tem característica de duas ou mais classes ???
Tal como java tambem tem php tem Interfaces, que permite fazer muitipla herança.
Perfect Lion Quanto tempo cara o//Entao... muito massa o artigo ae Vo ta acompanhando sempre ae :)
interfaces são como "contratos' que definem um padrao pra uma classe
toda classe que implementa a interface tem a obrigacao (por causa do "contrato") de implementar os metodos que ela pede
por exemplo
Interface "ICirurgiao" define os métodos que são necessários para que um objeto possa ser um "Cirurgiao"
public interface ICirurgiao {
void Operar();
}
a interface não define o corpo do método, apenas que ele deve existir, e como ele é chamado
uma certa classe implementa essa interface e implementa o codigo.. por exemplo:
public class Medico implements ICirurgiao {
public void Operar() {
// codigo do metodo
}
}
sem o método Operar, a classe Médico nao é nem executada, por nao obedecer as regras da interface que ele implementa
entao o que vai acontecer é um erro na hora de rodar
public class Medico implements ICirurgiao { ... } você pode dizer que o "médico é um cirurgião, porque o médico sabe (implementa) todas as funções de um cirurgião"
por isso em alguma funcao que voce precisar de um cirurgiao você pode fazer
public function Operar(ICirurgiao $i)
e ai você pode passar qualquer objeto do tipo ICircurgiao
isso é interessante em OO pq as vezes você quer permitir flexibilidade de como algo vai acontecer, mas nao sabe qual classe exatamente vai fazer o negocio
por exemplo
imagina que voce vai fazer um sistema, e voce vai ter que autenticar contra uma base de dados
mas você nao sabe exatamente qual base de dados, seu sistema é comercial. pode ser que o cliente use o seu banco, pode ser que ele queira usar o Active Directory do windows, ou pode ser que ele queira usar um outro banco de dados dele
você pode definir entao uma interface "ILoginChecker"
essa interface seria tipo:
public interface ILoginChecker{
bool IsValid(string user, string pass);
}
essa interface define que a classe precisa de um metodo chamado IsValid que recebe o nome e senha, e retorna true ou false
mas a interface só diz isso, nao diz qual classe vai fazer login
dai voce pode prover as suas classes que fazem login no seu banco, e permitir que o cliente implemente a que ele precisar
Fabyo dessa eu não sabia... que o php tbm tinha.. quando eu vi você esplicando eu me vi olhando o codigo inteiro do java pois em java é exatamente isso ai. a maneira que você está mostrando é possivel se criar um framework muito bom mesmo.. quem sabe não podemos montar um curso de como trabalhar com framework onde o kra pode criar o proprio sistema ;)
Fabyo, mais uma vez, você está de parabéns ! http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif
O exemplo que o Fabyo deu sobre Interfaces é muito bom.Mesmo assim, gostaria que o recurso de Herança Múltipla fosse implementado nas próximas versões do PHP. Afinal Herança multipla é um ítem de programação orientada a objetos. E pra quem acha que eu estou exagerando, o C, C++ e Python possuem esse recurso.
Pelo visto essa materia não ira ter uma terceira parte né, mas parabéns pelo intuito de ajudar e bem!!! E q eu estava aguardando uns meses agora resolvi perguntar!!!
Eu estou pensando em criar o 3° isso ai ainda é basico e o 3° provavelmente vai continuar no modo basico ;)
Tipo você poderia criar um basico mais com um interação com formularios e mysql, seria legal! Tipo cadastro de funcionario nome e profissao e mais qualquer coisa ou produtos nome e quant, depois num quarto tuto ensina editar e num quinto exibir. E poderia fazer isso utilizando a class BD do fabyo.
Ola, iniciei tem pouco tempo no PHP, ate que o primeiro tuto de classe eu peguei mas ou menos, agora essse segundo aqui ta dificil pacas, eu entender legal como a classe trabalha, nao qeuro so copior e colar, gostaria de entender melhor e oque to fazendo, ja tava dificl apareceu ai agora PRIVATE, PUBLIC e sei mas oque ta dificiiiil, gostaria que a galera ai postasse algum exemplo mas seimples de como usar as classes pra depois eu passar pra mas dificil e assim por diante, valew ai LION os tudo seu sao muito locos, bons mesmo, o lance ai de nao pegar legal e comigo mesmo que to meio garrado no assunto mas se poder me da uma força ai em exmplos mas simples de classe vai ser massa,. valrw ate mais....
Kra esquece esse negocio de private public por enquanto .... isso é para o php5 e para você entender isso primeiro você tem que entender o simples como funciona o negocio... então veja um simples aqui..
class foo{ var $nome; function setNome($nome){ return (!empty($nome))? $this->nome = $nome : false; }}$foo = new foo;$foo->setNome("Perfect Lion") or die("O nome não pode ser vazio");echo $foo->nome;// Imprime Perfect Lion
Viu uma bem simples.. onde eu seto um valor para uma propriedade dentro da classe depois chamo essa variavel e printo ela na tela para ver se funciono ;)
Boas antes de mais parebens pelo tutorial ta muito bom :D
A questao é a seguinte, ao invés de criar a função logar, não seria mais simples criar um construtor que iria fazer o que faz a função logar ?? assim ao invés de fazer $logar = new login();
fazia-se
$logar = new login("erick","12356");
assim era criado objecto com a info do user.
Talvez seja confuso mas é que ainda nao tou bem abituado ás class de php, normalmente a nivel de class ando mais em Java em que se usa bastante os contrutores da forma que referia.
desculpa de disse alguma coisa errada http://forum.imasters.com.br/public/style_emoticons/default/blush.gif http://forum.imasters.com.br/public/style_emoticons/default/blush.gif