Ir para conteúdo

POWERED BY:

Arquivado

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

luan_alves

criar objeto com classe PDO

Recommended Posts

bom dia a todos, estou com a seguinte dúvida.

tenho uma classe que faz a conexão com o banco utilizando pdo.

<?php
class Connection extends PDO {
 private $dsn = 'mysql:host=quimica;dbname=asseka2';
private $user = 'root';
private $password = 'comquimica';
public $handle = null;

function __construct( ) {
	try {
		if ( $this->handle == null ) {
			$dbh = parent::__construct( $this->dsn , $this->user , $this->password );
			$this->handle = $dbh;
			return $this->handle;
		}
	}
	catch ( PDOException $e ) {
		echo 'Connection failed: ' . $e->getMessage( );
		return false;
	}
}

function __destruct( ) {
	$this->handle = NULL;
}
}
?>

gostaria de criar uma classe que faz o CRUD a partir dela, exemplo.

<?php
class bateria extends conectaBanco{    
   function select(){
       $select = $this->("select * from tabelax");
       return $select;
   }
}

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

pq nao usa o pdo direto?

pq nao usa o mysqli direto?

pq usa os atributos private? pode ser q precise mudar os dados em tempo de execucao, se tem certeza q nunca ira modar estes dados, utilize como constantes ao invez de varaiveis...

 

um dos principios da orientacao a objetos eh: encapsule o q varia

Compartilhar este post


Link para o post
Compartilhar em outros sites

Igor, eu não sei como usar mysqli direto, e com certeza eu utilizarei encapsulamento, o meu problema é exatamente esse, como utilizar o pdo em minha classe.

 

exemplo de uso:

eu tenho um looping em de um select que eu já fiz anteriormente, e ai dentro deste looping eu faço um insert ou um delete, o delete não é problema porque eu fiz a modelagem dos dados, agora o insert seria algo bom em uma classe separada porque eu posso utiliza-la várias vezes, em qualquer parte do código

Compartilhar este post


Link para o post
Compartilhar em outros sites

pq nao usa o pdo direto?

pq nao usa o mysqli direto?

pq usa os atributos private? pode ser q precise mudar os dados em tempo de execucao, se tem certeza q nunca ira modar estes dados, utilize como constantes ao invez de varaiveis...

 

um dos principios da orientacao a objetos eh: encapsule o q varia

Mas se ele tá usando a classe "Connection" para construir a conexão em apenas um unico lugar, isso não é mais pratico? E uma dúvida, isso aqui é singleton nao?

 

function __construct( ) {
               try {
                       if ( $this->handle == null ) {
                               $dbh = parent::__construct( $this->dsn , $this->user , $this->password );
                               $this->handle = $dbh;
                               return $this->handle;
                       }
               }
               catch ( PDOException $e ) {
                       echo 'Connection failed: ' . $e->getMessage( );
                       return false;
               }
       }

Compartilhar este post


Link para o post
Compartilhar em outros sites

inabsolutamente, isso nao tem nada de singleton...e nao ha nada q caracterize um desing pattern...ele pode iniciar a conexao, e dar um include como todos fazem...,perdao, a maioria faz...nao tem pq ele criar uma outra classe se ja existe uma...a pdo eh pra multiplos bancos de dados..na verdade seria uma ajuda para aplicar o adapter aos bancos de dados...pra ele q ta comecando, seria interessante o mysql, ele nem pegou o basico e ker o avancado...??!?!?...

Compartilhar este post


Link para o post
Compartilhar em outros sites

inabsolutamente, isso nao tem nada de singleton...e nao ha nada q caracterize um desing pattern...ele pode iniciar a conexao, e dar um include como todos fazem...

kk pois é, preciso estudar mais sobre singleton. Quanto a classe "Connection", vai mais pro estilo da programação, eu mesmo prefiro instanciar uma classe q extenda o PDO e por essa classe eu defino a conexão em um só lugar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

kk pois é, preciso estudar mais sobre singleton. Quanto a classe "Connection", vai mais pro estilo da programação, eu mesmo prefiro instanciar uma classe q extenda o PDO e por essa classe eu defino a conexão em um só lugar.

é exatamente isso o que eu faço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

se a classe pdo e mysqli tem todos os metodos q vcs precisam, ro.fonseca, pq extende-la? se um dos motivos da orientacao a objetos eh reutilizacao de codigo? extendendo elas estarao aumentao o codigo ao invez de reutilizar....sacou?

 

agora se você me disser "eu estou extendendo pra implementar um metodo q a cada sql executado ele gere um log", ae sao outros 500...

Compartilhar este post


Link para o post
Compartilhar em outros sites

se a classe pdo e mysqli tem todos os metodos q vcs precisam, ro.fonseca, pq extende-la? se um dos motivos da orientacao a objetos eh reutilizacao de codigo? extendendo elas estarao aumentao o codigo ao invez de reutilizar....sacou?

 

agora se você me disser "eu estou extendendo pra implementar um metodo q a cada sql executado ele gere um log", ae sao outros 500...

na verdade eu a utilizo assim, porque foi assim que eu aprendi, não sabia que com a utilização do mysqli daria para fazer sem extender

Compartilhar este post


Link para o post
Compartilhar em outros sites

com certeza...qq classe da pra extender, a nao ser q a documentacao diga isto...qq classe dentro do core do php da pra extender...basta ler a documentacao...a classe mysqli eh super simples de usar, eh quase identica a mysql_connect...alias, da pra usa-la tb como estruturado e nao como objeto simples...

 

leia a documentacao com calma q você a entendera...

 

 

lembre-se a documentacao existe pra t auxiliar...

Compartilhar este post


Link para o post
Compartilhar em outros sites

se a classe pdo e mysqli tem todos os metodos q vcs precisam, ro.fonseca, pq extende-la? se um dos motivos da orientacao a objetos eh reutilizacao de codigo? extendendo elas estarao aumentao o codigo ao invez de reutilizar....sacou?

 

agora se você me disser "eu estou extendendo pra implementar um metodo q a cada sql executado ele gere um log", ae sao outros 500...

 

Primeiramente eu estendo somente para atribuir coisas basicas como dsn, usuario, senha etc, sim, eu sei q poderia definir isso como constantes em outro lugar, como num arquivo .ini, mas dentro da propria classe eu tb posso defini-las como constante... E depois quem sabe, se eu tiver q aumentar a complexidade da conexão eu posso implementar ainda mais a tal classe, só com isso já me ajuda bastante e eu nao vejo nenhuma violação a reutilização de codigos, acho q é mais estilo de programar... E tipo, o singleton não teria q ser implementado justamente na classe "Connection"?

Compartilhar este post


Link para o post
Compartilhar em outros sites

com certeza...qq classe da pra extender, a nao ser q a documentacao diga isto...qq classe dentro do core do php da pra extender...basta ler a documentacao...a classe mysqli eh super simples de usar, eh quase identica a mysql_connect...alias, da pra usa-la tb como estruturado e nao como objeto simples...

 

leia a documentacao com calma q você a entendera...

 

 

lembre-se a documentacao existe pra t auxiliar...

 

Pergunta eu comecei a utilizar o PDO por causa do Prepared statements, e junto disso eu utilizo procedures, o mysqli da suporte a isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

faz uma class abstrata..

 

extend abstract na suas view

 

Abstract

abstract class Abstrata{// uma interface vai muito bem aki =P

protected $_table = null;
   public function getConn() {

       return new Connections();
   } 
public function fetchAll()  {

        $db = $this->getConn();
       $smt = $db->query("SELECT * FROM `$this->_table`");
           return $smt->fetchAll(PDO::FETCH_ASSOC);

}
// faça estrutura para insert e updates delete. faça obrigatorio o uso de metodos fundamentais na sua view 

abstract function _insert();

}            

 

Produtos


final class Produtos extendes Abstrata{

   protected $_table = 'tb_produtos';

public function _insert(){

$db  = getConn();

$sql = "insert into ...."
}

//getter e setter 




}
$pd = new Produto()

$pd->fetchAll();

 

tenho uma pergunta =X ...

se você quer uma conexão persistente. Qual é a desse __destruct?

Compartilhar este post


Link para o post
Compartilhar em outros sites
Pergunta eu comecei a utilizar o PDO por causa do Prepared statements, e junto disso eu utilizo procedures, o mysqli da suporte a isso?

 

você nao leu o q eu escrevi: leia a documentacao

 

http://br.php.net/manual/pt_BR/mysqli.prepare.php

 

Luis paulo, este caso nao requer classe abstrata, alem disso, você estaria quase formando um obejto de patrao: o DAO, ou entao o ActiveRecord, embora este ultimo, seja um padrao, como diz martin fowler...enfim...

 

quando estudarem query object ou active record, verao q as coisas podem ser mais faceis e com mais classe, literalemente...

Compartilhar este post


Link para o post
Compartilhar em outros sites

=X

 

sei la se e necessario abstrai ou não mais!! o cara pediu uma forma de reutiliza o Conection dele nas suas classes

sem precisar fica instanciando a conections nas suas view.. (Foi isso q entendi da duvida dele hehehehehe..)

 

So acho q dessa maneira seria ideal pra ele =X

 

abstrai as funções uteis do CRUD.. (já que elas sempre vão fazer parte do contexto do codigo)

 

ao meu ver é uma boa pratica ^^

 

vo te q estuda a respieto disso query object ou active record

vlw a dica =P

 

você num precisa extende PDO instancia ele dentro do metodo!!!

 

 

 

class conection(){// uma interface iria bem aki =P

   static private $instance;// c vai usar uma unica instancia na conexão


public static getInstance(){

if(!self::$instance){

try{
self::$instance = new PDO()...
}catch(){.....}
}
return self::$instance;

}

}

// chamada


function getConn(){

return conection::getInstance();

}

Compartilhar este post


Link para o post
Compartilhar em outros sites
abstrai as funções uteis do CRUD.. (já que elas sempre vão fazer parte do contexto do codigo)

 

Luis paulo, este caso nao requer classe abstrata, alem disso, você estaria quase formando um obejto de patrao: o DAO, ou entao o ActiveRecord, embora este ultimo, seja um padrao, como diz martin fowler...enfim...

 

quando estudarem query object ou active record, verao q as coisas podem ser mais faceis e com mais classe, literalemente...

 

tem que ler mais, leiam com ais atencao...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Luan, acredite ja passei por isso...

... o DAO, ou entao o ActiveRecord, embora este ultimo, seja um padrao, como diz martin fowler...enfim...

 

quando estudarem query object ou active record, verao q as coisas podem ser mais faceis e com mais classe, literalemente...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Luan, acredite ja passei por isso...

 

Igor eu realmente acredito que voce já tenha passado por isso, e só por isso você esta tentando passar uma forma melhor de fazer o trabalho.

Eu já estava estudando o Pattern DAO porque estou estudando o Framework Yii, e eu estava a procura do Parttern Singleton só não sabia o nome.

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.