Ir para conteúdo

Arquivado

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

marcelobbt

PHPOO - Forma correta

Recommended Posts

Comecei a aprender PHP por conta própria e estudei diversos materiais. Com o tempo comecei a usar a programação orientada a objetos, ou pelo menos achei que estava usando. De uns tempos para cá, comecei a ficar em dúvida se estaria fazendo da forma correta. Então busquei outros materiais, revi os antigos e veio uma dúvida que não consegui resposta e gostaria de saber se podem me ajudar.

 

Quando pego uma série de registros de um banco de dados, devo coloca-los num único objeto, ou criar um objeto para cada registro?

 

Para clarear minha pergunta segue mais detalhes de como faço até hoje.

Eu utilizo o CodeIgniter e então criei um model chamado CRUD onde obtenho os valores desejados de qualquer tabela do banco de dados, por exemplo, usando a função abaixo:

 

public function SelecionaTodos ($tabela) {
	return $this->db->get($tabela);
}

Até este ponto está tudo num único objeto. Mas vamos dizer que vou trabalhar com os dados da tabela "aluno". Então queria pegar os dados que essa função retorna e jogar na classe Aluno para fazer as rotinas do sistema. Aí que vem a dúvida se devo jogar os valores todos como um array, ou crio um objeto para cada registro retornado, enfim, gostaria de ouvir a opinião dos especialistas ou mais experientes. 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

É melhor ter vários módulos, cada um com sua devida responsabilidade, do que um módulo com várias responsabilidades!

 

Hoje você retorna um array, amanhã precisa retornar um json, vai ficar alterando o CRUD?

É meio obvio que corre o risco de quebrar a aplicação.

 

Você pode resolver isso criando uma classe que faz o intermediação entre o Controller e a Model, que é o Repositorio. Já que CI usa a arquitetura MVC.

 

Em 03/04/2017 at 07:45, marcelobbt disse:

Eu utilizo o CodeIgniter e então criei um model chamado CRUD onde obtenho os valores desejados de qualquer tabela do banco de dados, por exemplo, usando a função abaixo:

Ruim do Ci é isso, ninguém segue um padrão. O que mais vemos é aplicação + pra - do que - pra + com o Ci.

 

Só não faça isso em um repositório.

 

<?php

class UsuarioRepositorio
{

    public function selecionaTodos($tabela) {
        return $this->db->get($tabela);
    }    
    

}

 

Muito menos abstrair algo que já fora abstraído.

Exemplo:

<?php

class UserRepository
{

    public function getAll() {
        return $this->model->all();
    }


}

Erro muito comum que vejo por ai.

Fora as bizarrices de criar pacotes deste pattern e com assinaturas de métodos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Marcelo, se você esta se referindo a retornar um \PDO::FETCH_ASSOC  ou  \PDO::FETCH_OBJ ou algo correlato, ao meu ver, já que estamos trabalhando com orientação a objetos, faz mais sentido ter uma coleção de objetos do que de arrays, a não ser que você tenha um bom motivo para retornar um array.
 

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por Paulo Correia
      Tenho uma dúvida, ou acho que estou fazendo errado (rsrsrsrs).

      Seria assim, numa classe que seria a Pai (em arquivo separado) eu teria 
      o construct que faria os setters numas váriaveis private, mais ou menos 
      assim:

      <?

      namespace UmNomeQualquer;

      class Pai {

           protected $_var;

           public function __construct($var) {

               $this->_var = $var;

           }

      }

      ?>

      E numa outra que seria a Filha(o) (em arquivo separado) eu leria esta 
      variável, certo?

      <?

      namespace UmNomeQualquer;

      class Filha extends Pai {

           public function mostra() {

               return $this->_var;

           }

      }

      ?>

      Mas quando eu vou testar dá erro falando que não passei todos os 
      argumentos ao construtor:

      <?

      include "pai.php";
      include "filha.php";

      use Nome\Pai;
      use Nome\Filha;

      $pai = new Pai("123");

      $filha = new Filha();

      echo $filha->mostra();

      ?>

      Mensagem de erro:

      PHP Fatal error:  Uncaught ArgumentCountError: Too few arguments to 
      function Nome\Pai::__construct(), 0 passed in test.php on line 11 and 
      exactly 1 expected in pai.php:8
      Stack trace:
      #0 test.php(11): Nome\Pai->__construct()
      #1 {main}
         thrown in pai.php on line 8

      Onde estou errando??

      Não é para não repetir o código, (DRY), isto não inclui as variáveis??

      Desde já agradeço,

      Paulo
    • Por junior almeida
      Tenho uma duvida sobre php + orientação a objetos.
      estou desenvolvendo um sistema, na parte de login o usuário entra com os dados de e-mail e senha e um método faz uma consulta no banco para ver se os dados que foi digitados estão corretos
      apos estar correto grava o id em uma sessao e armazeno o objeto gerado da consulta em uma variável usando o método setResultado, na pagina de usuario pego a sessao do id e faço uma consulta no banco passando o id e utilizo o método getResultado para pegar o objeto da consulta que me retorna. ate ai tudo bem mas me gerou uma duvida se outra pessoa fizer um login os dados que estavam armazenados na variável resultados vão ser perdidos ou os dados de variáveis ficam salvos em alguma especie de cookies.
       
      exemplo: pessoa A fez o login seus dados foram setados em uma variável resultado logo em seguida a pessoa B faz o login ela também tem seus dados setados na variável resultado, os dados da pessoa A foi perdido ou ele fica salvo em algum lugar.
       
      não sei se ficou confuso mas se alguém puder me tirar essa duvida.
    • Por Misael Silva
      Olá, membros do forum, gostaria de saber de um livro de PHP que ensina-se a desenvolver códigos php de um loja virtual, um e-commerce, ate encontrei esse  livro https://www.thiengo.com.br/e-commerce-com-php-e-mysql, porém descobri que não é orientado a objeto, um ponto que ficou a desejar, vocês tem dicas de outros livros semelhantes? Agradeço!
    • Por Will871
      Boa tarde, galera.
      Sou novato no PDO, e estou tendo uma dúvida sobre como receber a variável de conexão do banco de dados em um método.
      Tenho o seguinte código:
       
      banco.php
      <?php try {     $BD_host = "localhost";     $BD_banco = "jacyfash_loja";     $BD_usuario = "root";     $BD_senha = "";     $conn = new PDO("mysql:host=".$BD_host.";dbname=".$BD_banco, $BD_usuario, $BD_senha); } catch (PDOException $i) {     die("Erro: <code>" . $i->getMessage() . "</code>"); } usuario.php
      <?php require_once 'banco.php'; class valida{     function login(){                  }          function cadastro(){         $nome = $_POST['nome'];         $usuario = $_POST['usuario'];         $email = $_POST['email'];         $senha = $_POST['senha'];         $sql = "INSERT INTO cliente(nome, usuario, email, senha) VALUES(:nome, :usuario, :email, :senha)"; //===================================================================================== //Sempre que tento acessar o $conn de dentro de uma function ele retorna erro dizendo que a variável não existe. ( Erro: Undefined variable: conn) //=====================================================================================         $stmt = $conn->prepare($sql);         $stmt->bindParam(':nome', $nome );         $stmt->bindParam(':usuario', $site );         $stmt->bindParam(':email', $email);         $stmt->bindParam(':senha', $senha);     }          function bloqueio(){              } } Já pesquisei muito sobre como fazer isso, mas não consegui nada. Se alguém puder ajudar, agradeço.   ^^
    • Por Emanuel Raul
      Olá... Comecei hoje a estudar PHPOO por conta própria, e já me deparei com uma dúvida.
      Qual a maneira correta de nomear as classes no PHP? NomeDaClass.php ou NomeDaClasse.class.php?
      Se for possível alguém me explicar se existe alguma diferença entra ambas eu agradeço desde já.
       
      Um Abraço...
×

Informação importante

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