Ir para conteúdo

Arquivado

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

montano

PHP Orientado Objeto

Recommended Posts

bom dia,

 

Bom estou programando em OO a alguns meses e ainda fico meio na duvida de boas praticas.

 

Por exemplo, preciso fazer um insert, eu faço assim.

 

   class super{
    
      function insert($tabela,$campos,$values,$where){
        $this->execute("INSERT INTO $tabela ($campos) ($values) $where");
       }
}

   classe produto extends super{
     //Outros metodos 
}

$obj = new produto();
$obj->insert('tb_produto','produto','Produto A','');

Foi uma maneira de eu encontrei para facilitar meus processos, mas as vezes eu preciso validar alguns campos ou pesquisar conteudos em uma tabela apartir de um FK. eu fico na duvida se jogo os meus $_GET, $_POST para dentro da classe como propriedades. EX:

 

   class super{
    
     function insert(){
        $this->execute("INSERT INTO $this->tabela (produto) ($this->produto)");
       }
}

   classe produto extends super{
       public $produto;
       public $tabela;       
}

$obj = new produto();
$obj->produto = $_GET['produto'];
$obj->tabela = 'tb_produto';
$obj->insert();

Nao sei se fui claro, mas a minha duvida é: como saber quando se deve criar propriedades ou quando enviar como parametro para uma function.

 

vlw

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom estou programando em OO a alguns meses e ainda fico meio na duvida de boas praticas.

mas a minha duvida é: como saber quando se deve criar propriedades ou quando enviar como parametro para uma function.

 

A POO oferece o encapsulamento que é justamente isso.

Tente sempre que possível, deixar suas propriedades privadas e utilize setters e getters para modificá-las.

 

abstract class AbstractProduct {
    public function insert( $table ){
        $data = get_object_vars( $this );
        printf( 'INSERT INTO `%s`(`%s`) VALUES("%s");' , $table , implode( '`,`' , array_keys( $data ) ) , implode( '","' , $data ) );
    }
}

class Product extends AbstractProduct {
    private $table;
    protected $name;

    public function getName(){ return $this->name; }
    public function getTable(){ return $this->table; }

    public function insert(){
        parent::insert( $this->table );
    }

    public function setName( $name ){
        $this->name = $name;
    }

    public function setTable( $table ){
        $this->table = $table;
    }
}

$teste = new Product();
$teste->setName( 'teste' );
$teste->setTable( 'tabela' );
$teste->insert();

Compartilhar este post


Link para o post
Compartilhar em outros sites

printf( 'INSERT INTO `%s`(`%s`) VALUES("%s");' , $table , implode( '`,`' , array_keys( $data ) ) , implode( '","' , $data ) );

Para que serve os %s , implode e esses array_keys?

 

vlw

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para que serve os %s

o %s indica parametro string se nao me engano .. nao tenho certeza :P mas é algo assim .. qualquer coisa da uma lida em ..

http://br2.php.net/sprintf

 

quanto a classe .. depende .. neste caso especifico que você apresento eu usaria o primeiro metodo pois você so vai utilizar aqueles valores naquele metodo .. mas caso essa classe tivese mais metodos que utilizariam estes mesmos valores .. ai seria interressante torna-los atributos da classe ..

 

valww =]

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.