Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Perfect Lion

Classes Parte 2

Recommended Posts

Classes - Parte 1

Classes - Parte 3

 

 

 

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 ^^

 

 

 

 

 

Classes - Parte 1

Classes - Parte 3

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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 ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

HHaahaha valeu ai Luis vou ver se crio mais depois.. e que está corrigo aqui...

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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...

Compartilhar este post


Link para o post
Compartilhar em outros sites

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 ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.. ^^

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

Perfeito fabão ^^ como sempre clareando mais a minha mente com as classes ^^

Compartilhar este post


Link para o post
Compartilhar em outros sites

Perfect Lion Quanto tempo cara o//Entao... muito massa o artigo ae Vo ta acompanhando sempre ae :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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 ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.