ene1 0 Denunciar post Postado Outubro 24, 2016 Tenho uma classe de Usuário com seus gets e sets, e o construtor com seu nome, email, senha, etc. Em outra classe (UsuarioDados), eu tenho uma função que cadastra o usuário no banco de dados. function cadastrar(Usuario $usuario){ $usuario->getNome(); } Em outro arquivo php eu instancio a classe usuário e chamo o método de cadastrar. $UsuarioDado = new UsuarioDado(); $usuario = new Usuario($nome, email); $UsuarioDado->cadastrar($usuario); Agora eu quero criar o método de verificar o login, mas teria que criar um construtor contendo apenas o nome e e-mail. Teria algum problema em fazer isso? Compartilhar este post Link para o post Compartilhar em outros sites
LaerteDias 17 Denunciar post Postado Outubro 24, 2016 Desde que seja realmente necessário não é má prática, você só deve avaliar se é mesmo necessário. Compartilhar este post Link para o post Compartilhar em outros sites
LaerteDias 17 Denunciar post Postado Outubro 24, 2016 você está inicializando todos pelo construtor e ainda criando os setters? Compartilhar este post Link para o post Compartilhar em outros sites
LaerteDias 17 Denunciar post Postado Outubro 24, 2016 O nome dessa operação criação de mais de um construtor para uma mesma classe, chama-se sobrecarga de construtor, caso queira saber mais vá no site da Caelum: lá tem apostila é de Java mas versa bastante assuntos de O.O. O download das apostilas é gratuito. Compartilhar este post Link para o post Compartilhar em outros sites
Williams Duarte 431 Denunciar post Postado Outubro 25, 2016 $UsuarioDado = new UsuarioDado(); $usuario = new Usuario($nome, email); $UsuarioDado->cadastrar($usuario); Essa Classe Usuário é uma entidade, por que ela está recebendo parâmetros pelo construtor? Faça o encapsulamento dos getters e setters da Entidade Usuario, nos objetos das classes que for usar, pois já é seus atributos. Compartilhar este post Link para o post Compartilhar em outros sites
ene1 0 Denunciar post Postado Outubro 25, 2016 Essa Classe Usuário é uma entidade, por que ela está recebendo parâmetros pelo construtor? Faça o encapsulamento dos getters e setters da Entidade Usuario, nos objetos das classes que for usar, pois já é seus atributos. Então Williams, a forma que encontrei de instanciar o usuário foi colocando os atributos no construtor, sem os atributos (ex: $usuario = new Usuario() ) apresentava erro. Faça o encapsulamento dos getters e setters da Entidade Usuario, nos objetos das classes que for usar, pois já é seus atributos Você poderia explicar melhor? não consegui muito bem entender o que você disse. Compartilhar este post Link para o post Compartilhar em outros sites
Williams Duarte 431 Denunciar post Postado Outubro 25, 2016 Segue um exemplo básicoUsuario.php <?php class Usuario { private $nome; private $email; private $senha; /** * @param mixed $email */ public function setEmail($email) { $this->email = $email; } /** * @return mixed */ public function getEmail() { return $this->email; } /** * @param mixed $nome */ public function setNome($nome) { $this->nome = $nome; } /** * @return mixed */ public function getNome() { return $this->nome; } /** * @param mixed $senha */ public function setSenha($senha) { $this->senha = $senha; } /** * @return mixed */ public function getSenha() { return $this->senha; } } UsuarioDAO.php class UsuarioDAO { public function cadastrar(Usuario $usuario) { echo "Cadastrar: \n"; echo $usuario->getNome(); echo "\n"; echo $usuario->getEmail(); echo "\n"; echo $usuario->getSenha(); } public function login(Usuario $usuario) { echo "\n\nLogin: \n"; echo $usuario->getEmail(); echo "\n"; echo $usuario->getSenha(); } } Uso $usuario = new Usuario(); $usuarioDAO = new UsuarioDAO(); $usuario->setNome('ene1'); $usuario->setEmail('ene1@site.com'); $usuario->setSenha('123456'); $usuarioDAO->cadastrar( $usuario ); $usuarioDAO->login( $usuario ); Dessa forma voce pode extender sua model ou passar por DI sua conexão, você escolhe. Não preciso explicar o que é DI né?Isso você já deve ter estudado. IDEONE http://ideone.com/mJ42Cf Compartilhar este post Link para o post Compartilhar em outros sites
ene1 0 Denunciar post Postado Outubro 25, 2016 Segue um exemplo básico Usuario.php <?php class Usuario { private $nome; private $email; private $senha; /** * @param mixed $email */ public function setEmail($email) { $this->email = $email; } /** * @return mixed */ public function getEmail() { return $this->email; } /** * @param mixed $nome */ public function setNome($nome) { $this->nome = $nome; } /** * @return mixed */ public function getNome() { return $this->nome; } /** * @param mixed $senha */ public function setSenha($senha) { $this->senha = $senha; } /** * @return mixed */ public function getSenha() { return $this->senha; } } UsuarioDAO.php class UsuarioDAO { public function cadastrar(Usuario $usuario) { echo "Cadastrar: \n"; echo $usuario->getNome(); echo "\n"; echo $usuario->getEmail(); echo "\n"; echo $usuario->getSenha(); } public function login(Usuario $usuario) { echo "\n\nLogin: \n"; echo $usuario->getEmail(); echo "\n"; echo $usuario->getSenha(); } } Uso $usuario = new Usuario(); $usuarioDAO = new UsuarioDAO(); $usuario->setNome('ene1'); $usuario->setEmail('ene1@site.com'); $usuario->setSenha('123456'); $usuarioDAO->cadastrar( $usuario ); $usuarioDAO->login( $usuario ); Dessa forma voce pode extender sua model ou passar por DI sua conexão, você escolhe. Não preciso explicar o que é DI né? Isso você já deve ter estudado. IDEONE http://ideone.com/mJ42Cf O seu exemplo está praticamente igual com o que estou fazendo. Na parte do uso, estou fazendo um pouco diferente, estou passando o POST nas variáveis. Mas não estou utilizando os sets. $nome = $_POST['nome']; $usuario = new Usuario($nome, email); $UsuarioDado->cadastrar($usuario); Portanto, o construtor do usuário está pegando as variáveis do formulário. Você recomenda fazer isso de alguma outra forma? Compartilhar este post Link para o post Compartilhar em outros sites
LaerteDias 17 Denunciar post Postado Outubro 25, 2016 ene1, pode mostrar como você está fazendo? Compartilhar este post Link para o post Compartilhar em outros sites
Williams Duarte 431 Denunciar post Postado Outubro 25, 2016 O seu exemplo está praticamente igual com o que estou fazendo. Ops! Verdade, mas atente-se aos princípios da responsabilidade única, mas seguindo um padrão você dará mais consistência a sua aplicação, por enquanto no que você apresentou não há nada disso. Leia mais aqui Portanto, o construtor do usuário está pegando as variáveis do formulário. Você recomenda fazer isso de alguma outra forma? Siga os padrões de projeto e estude injeção de dependência. Vale a pena a leitura de alguns tópicos selecionados do padrão GOF. http://forum.imasters.com.br/topic/402329-padroes-gof/ Compartilhar este post Link para o post Compartilhar em outros sites
ene1 0 Denunciar post Postado Outubro 27, 2016 ene1, pode mostrar como você está fazendo? Função de inserção no BD: public function inserirUsuario(Usuario $usuario) { $con = Conexao::getInstance(); $sql = "insert into usuarios (nome, sobrenome, cpf, email, senha) values (:nome, :sobrenome, :cpf, :email, :senha)"; $stmt = $con->prepare($sql); $stmt->bindValue("nome", $usuario->getNome(), PDO::PARAM_STR); $stmt->bindValue("sobrenome", $usuario->getSobrenome(), PDO::PARAM_STR); $stmt->bindValue("cpf", $usuario->getCpf(), PDO::PARAM_STR); $stmt->bindValue("email", $usuario->getEmail(), PDO::PARAM_STR); $stmt->bindValue("senha", $usuario->getSenha(), PDO::PARAM_STR); $stmt->execute(); } Arquivo php contendo os POST para o formulário HTML if (isset($_POST['cadastrarUsuario'])){ $nome = $_POST['nome']; $sobrenome = $_POST['sobrenome']; $cpf = $_POST['cpf']; $email = $_POST['email']; $senha = $_POST['senha']; $usuarioDAO = new UsuarioDAO(); $usuario = new Usuario($nome, $sobrenome, $cpf, $email, $senha); $usuarioDAO->inserirUsuario($usuario); } Compartilhar este post Link para o post Compartilhar em outros sites