Ir para conteúdo

POWERED BY:

Arquivado

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

angelorubin

Começar uma classe do zero

Recommended Posts

Pessoal, o Angelo quer começar uma classe do zero, entao, vamos dar uma mao pra ele ai em... eu ja falei com ele via msn , e acho q uma manipuladora de base mysql simples ja resolve... entao , vamos começar por aqui, certo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

ENTAO VAMOS À CLASS

 

VOU POSTA-LA AQUI NO INCIO E DEPOIS FALAREMOS DAS PARTES DELA DE MODO QUE VOCE ENTENDA ELA COMO UM TODO E SEU FUNCIONAMENTO

 

<?php
class db {
  /**
   * Classe db - DataBase
   * Faz as funnções do MySQL de forma simples e prática, apenas usando letras como base.
   */

	private $host="localhost";
	private $user="SEU USUARIO DE BANCO";
	private $pass="SUA SENHA";
	private $bd="SEU BANCO DE DADOS";
	private $tabelas;


	function __construct () {
		@mysql_connect ($this->host,$this->user,$this->pass) OR DIE ("Não foi possível conectar-se ao Banco de Dados. Motivo: ".mysql_error());
		@mysql_select_db ($this->bd);
		// Pegando as tabelas e guardando-as em um array
		$r=mysql_list_tables ($this->bd);
		while ($tabela=$this->fa ($r)) $this->tabelas[].=$tabela[0];
	}
	/**
	 * @return bool
	 * @param string $tabela A tabela que se procura
	 * @desc Faz uma verificação nas tabelas do Banco de dados, Retorna true caso a tabela exista no Banco de dados
	 */
	function v_t ($tabela) {
		if(!in_array($tabela,$this->tabelas)){
			die('Tabela '.$tabela.' nao existente no banco de dados');
		}else return true;
	}
  /**
   * FA - fetch_array
   * retorna o 'fetch_array' de um resultado mySQL
   * 
   * @param void $result O resultado de uma query do MySQL
   * @return void
   * 
   */
	function fa ($result) {
		return mysql_fetch_array ($result);
	}
  /**
   * FO - fetch_object
   * retorna o fetch object de um resultado mySQL
   *
   * @param void $result O resultado de uma query do MySQL
   * @return object
   */
	function fo ($result) {
		return mysql_fetch_object ($result);
	}
  /**
   * Q - query
   * Faz uma query ao banco de dados mySQL
   *
   * @param string $query A query que deseja ser efetuada
   * @param bool $show Mostrar a query que foi injetada ou não.
   * @return void
   */
	function q ($query,$show=0) {
		if ($show) echo '<br />'.$query.'<br />';
		//echo "<!-- $query -->\n";
		return mysql_query ($query);//or die(mysql_error());
	}
  /**
   * NR - num_rows
   * Retorna o número de linhas de um resultado de uma query MySQL
   *
   * @param void $result O resultado de uma query do MySQL
   * @return int O número de linhas de uma query
   */
	function nr ($result) {
		return mysql_num_rows ($result);
	}
  /**
   * AR - affected_rows
   * Retorna o número de linhas afetadas por uma query mySQL
   *
   * @param void $result O resultado de uma query do MySQL
   * @return int O número de linhas afetadas por uma query mySQL
   */
	function ar ($result) {
		return mysql_affected_rows ($result);
	}

	/* -------------------------
		Funções complexas
	------------------------- */

	/**
	 * I - insert
	 * Insere dados em uma tabela através de um array associativo
	 * 
	 * <code>
	 * <?php
	 * $dados=array (
	 *   'nome'=>'Michael',
	 *   'idade'=>22,
	 *   'filhos'=>1
	 * );
	 * $db->i ('pessoas',$dados);
	 * ? >
	 * </code>
	 *
	 * @param string $tabela
	 * @param array $dados
	 * @return void
	 */
	function i ($tabela,$dados) {
		if ((is_array($dados)) && ( $this->v_t($tabela) ) ) {
			foreach ($dados as $k=>$v) {
				$keys.=(substr($keys,-1)=="`"?",":"") . "`$k`";
				$values.=($v=='NOW ()'?" NOW( )":" '$v'").",";
			}
			$values=substr($values,0,-1);
			return $this->q ( "INSERT INTO `$tabela` ($keys) VALUES ($values)");
		}
	}
  /**
   * S - search
   * Faz uma busca sobre dados de uma tabela
   *
   * @param string $tabela
   * @param string $campos
   * @param int $limitStart
   * @param int $limit
   * @param string $order
   * @param bool $orderMethod
   * @return void
   * 
   */
	function s ($tabela,$campos="",$limitStart=0,$limit=30,$order="id",$orderMethod=true) {
		if ($this->v_t($tabela)) {
			if ($campos=="") { $campos = "*"; }
			settype ($limit,integer);
			$limit = ($limitStart===false?"":"$limitStart,") ."$limit";
			if ($order) { $order="ORDER BY `$order` ".($orderMethod==true?"DESC":"ASC"); }
			return $this->q ("SELECT $campos FROM `$tabela` $order LIMIT $limit");
		}
	}

	/**
	 * umResultado
	 * Muito útil para quando fazemos uma query que nos retorna apenas um resultado e não há necessidade de usar fetch_array,  fetch_object
	 *
	 * @param void $resultado
	 * @param string $campo
	 * @return mixed
	 */
  function umResultado ($resultado,$campo=0) {
	return mysql_result($resultado,0,$campo);
  }
  /**
   * P - procura
   * Faz uma procura no MySQL através de um WHERE
   *
   * @param string $campos
   * @param string $tabela
   * @param string $where
   * @return void
   */
  function p ($campos,$tabela,$where='',$order='') {
	if ($this->v_t($tabela)) {
	 	  return $this->q ("SELECT $campos FROM $tabela ".($where ?" WHERE ".$where:'').($order ?" ORDER BY ".$oder:''));
	  }
  }
  
  function p1 ($campos,$tabela,$campob,$busca) {
		if ($this->v_t($tabela)) {
	 	 	return $this->q ("SELECT $campos FROM $tabela WHERE $campob=$busca");
	  }
  }
  /**
   * U - update
   * faz o update em cima de um dado no banco de dados
   *
   * @param string $tabela
   * @param string $campo
   * @param string $valor
   * @param int $condicao (Trabalhando com o campo ID)
   * @return void
   */
  function u ($tabela,$campo,$valor,$condicao) {
	if ($this->v_t($tabela)) {
		  $sql="UPDATE `$tabela` SET `$campo`='$valor' WHERE id=$condicao";
		  return $this->q ($sql);
	  }
  }
  /**
   * update
   * Faz o update em cima de um array associativo
   *
   * @param string $tabela
   * @param array $dados
   * @param integer $id
   * @return void
   */
  function update ($tabela,$dados,$id) {
		if ((is_array($dados)) && ( $this->v_t($tabela) ) ) {
			foreach ($dados as $k=>$v) {
			  $query.=($query?", ":"")."`$k`='$v'";
			}
			return $this->q ( "UPDATE `$tabela` SET $query WHERE `id`=$id");
		}
	}  

  function update2 ($tabela,$dados,$id) {
		if ((is_array($dados)) && ( $this->v_t($tabela) ) ) {
			foreach ($dados as $k=>$v) {
			  $query.=($query?", ":"")."`$k`='$v'";
			}
			return $this->q ( "UPDATE `$tabela` SET $query WHERE $id");
		}
	}  
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Temos incialmente... as variaveis definidas abaixo, elas sao privativas dessa classe de modo que você nao consegue usa-las fora da classe.. por isso o PRIVATE

 

private $host="localhost";
private $user="SEU USUARIO DE BANCO";
private $pass="SUA SENHA";
private $bd="SEU BANCO DE DADOS";
private $tabelas;

 

_____________________

 

 

Apos, temos a função construtora da class... de modo que você nao precisa denominar metodos quando do uso da class para executa-la, ou seja ela executa todas as vezes que você chamar a class com algum de seus metodos.

 

Assim: (REPARE ABAIXO) $result=$editar_db->q($sql);

 

O q acima é um metodo da classe, veja na classe function q

Logo temos um exemplo do uso do metodo q da class, metodo esse que executa a query dentro do parentese.

Assim :

 

if ($_GET['acao']=='deletar') {
	$editar_db=new db;
	$sql = "DELETE FROM clientes WHERE id =".$_GET['id'];
	$result=$editar_db->q($sql);   
	if ($result=="0"){'<p class"erro">Erro na Atualização.</p>'; }
	else { echo '<p>Cliente deletado com sussesso</p>'; }
  }

______________________

 

 

Agora explicando:

 

a função __construct()

 

@mysql_connect ($this->host,$this->user,$this->pass) OR DIE ("Não foi possível conectar-se ao Banco de Dados. Motivo: ".mysql_error());
@mysql_select_db ($this->bd);

Nessas duas alinha acima, conectamos a base de dados, usando aqui as variaveis que constamos no inicio da class, repare o $this antes das variaveis, isso significa que estamos chamandao uma variavel que esta no mesmo nivel de execução da class.

Sendo que na primeira linha conectamos ou matamos a fução caso retorne erro com a funcçção nativa DIE e

Na segunda linah selecionamos a tabla para trabalhar

 

a funçao v_t()

 

Repare acima da função uma pequena documentação, é bom constar, e lembro a todos aqui q nao estou firsando de inicio o padrao de documentação e sim uma breve explanação na construção de uma classe, ate porque sou um mero aprendiz nisso tudo aqui.

Entao, logo apos o comentario, que fica entre os caracteres /* comentario */ o conteudo da função, vejamos

 

if(!in_array($tabela,$this->tabelas)){
			die('Tabela '.$tabela.' nao existente no banco de dados');

Nese caso, temos uma função nativa php <strong>in_array</strong> cuja nao vou entrar em seu merito, mas e uma verificadora de vetor, ou seja, se eu nao localizar dentro do array determinado valor ela retorna false.

 

Entao que que eu fiz, essa função na realidade ela ira, em conjunto com outros metodos da class verificar na base de dados, se a tabela colocada para ser trabalhada pela class existe em seu banco de dados, e se nao for localizada, ai teremos um erro tratado ali. Simples mas eficiente.

 

Ate ai , se eu consegui passar alguma coisa... e existir alguma duvida estarei aqui por algum tempo para entao prosseguirmos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia pessoal,

 

Então Tel, muito interessante a classe de manipulação de banco, porem assim acho que vou atropelar muita coisa importante sem entender muito bem o sentido da coisa, acho meio dificil isso ainda, creio que necessito de uma coisa mais basica no momento para pegar o ritmo e fixar a ideia do negocio, será q é possivel isso?

 

Muito obrigado mesmo assim pela boa vontade.

 

angelorubin.

Compartilhar este post


Link para o post
Compartilhar em outros sites

tipo assim ??

 

<?php

class teste{

	function hello(){
		 return 'hello world!';
	}

}

// chamando o objeto hello dentro da class teste
echo teste::hello();

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

A class angelo, e um conjunto de funçoes, entao você alinah primeiro a necessidade da existencia dela, ou seja você qr um data grid, uma manipuladora de banco, uma de geradora de formulario entre mil e uma q você pode achar por ai.

 

o que torna a class interessante é o fato da encomia de linahs de codigo e o fato de mudando os metodos você muda o sistema todo por onde ela executa, entao ai você tem muita agilidade no processo de upgrade de seus projetos. (Ps.:conhecendo o metodo mvc entao você vai pirar - isso mais pra frente).

 

para você começar a programar orientado a objeto, é necessario primeiro que você conheça um pouco do php e suas funçoes nativas, ai sim partir pra um segundo passo e começar a trablhar com funçoes feitas por você e posteriomente aninha-las numa class.

 

Porque o sistema usando class, fica mais separado e mais limpo seus codigos. mas pra começar, nem sempre e assim, geralmente os codigos de quem ta começando sao randonicos e extensos, nao que isso seja errado, mas fora de alguns padroes.

 

Nese forum aqui tem muita gente boa em php, acompanhe mais de perto as questoes, participe, você chega onde você quer

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma classe é, a princípio, uma coleção de métodos (funções, comportamentos) e propriedades (variáveis, características).

Digo a princípio porque isso é o básico pra se mergulhar na Orientação a Objetos. Você deve procurar aprender sobre conceitos como Herança e Associações pra entender melhor porque as classes são tão importantes.

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.