O que há de Novo?
Fórum Outer Space - O maior fórum de games do Brasil

Registre uma conta gratuita hoje para se tornar um membro! Uma vez conectado, você poderá participar neste site adicionando seus próprios tópicos e postagens, além de se conectar com outros membros por meio de sua própria caixa de entrada privada!

  • Anunciando os planos GOLD no Fórum Outer Space
    Visitante, agora você pode ajudar o Fórum Outer Space e receber alguns recursos exclusivos, incluindo navegação sem anúncios e dois temas exclusivos. Veja os detalhes aqui.


[Programadores] Ajuda - PHP e Classes

Bug_Secular

Bam-bam-bam
Mensagens
3.357
Reações
4.789
Pontos
303
Então... Estou enfrentando uns problemas pessoas com as classes. Eu gosto de usar as classes por me dar sensação de "controlar" as ações e reaproveitar códigos, mas não sei se estou fazendo de maneira correta. Sei que tem as regras, e tals. Mas mesmo sabendo uma base dessas regras, tem horas que me sinto noob.

Poderiam me ajudar nesta classe?


PHP:
<?php
    class Membro{
  
//Sei que costumam colocar uns atributos aqui, como tipo: $nome, $email, $senha, $id... Mas em muitas ocasiões, mesmo estando na mesma classe, gosto de passar pelos parametros.

        public function __construct(){
            if(isset($_GET["acao"]) && is_string($_GET["acao"])){
                switch($_GET["acao"]){
                    case "adicionar":
                        $this -> adicionar_membro();
                    ;
                    break;
                    case "editar":
                        $this -> editar_membro();
                    ;
                    break;
                    default:"";
                    break;
                }
            }
            return false;
        }
      
        public function adicionar_membro(){
            if(isset($_POST["email"]) && is_string($_POST["email"]) && isset($_POST["senha"]) && is_string($_POST["senha"])){
                //Podendo retonar true ou erro
            }
            return false;
        }
      
        public function editar_membro($id=0){
            if(!is_array($this -> getMembro($id))){
                return false;
            }
            if(isset($_POST["email"]) && is_string($_POST["email"]) && isset($_POST["senha"]) && is_string($_POST["senha"])){
                //Podendo retorna true ou erro
            }
            return false;
        }
      
        public static function getMembro($id){
            //Se existir, retorna o array. Se não, false.
        }
      
        public static function getMembros(){
            //Retorna o array de membros
        }
  
    }
?>

Ela está 100% errada?

Observação pra quem tá com o mesmo problema para se adaptar ao POO:

 
Ultima Edição:

dk120

Lenda da internet
Mensagens
41.900
Reações
95.060
Pontos
2.179
Do ponto de vista de programação moderna está muito errado. Uma classe de modelo de jeito nenhum pode acessar GET e POST. Método construtor serve para iniciar atributos e deve ter o mínimo de ações possíveis e também não tem return. Métodos estatícos raramente são usados.

Eu faria uma classe controller para tratar o que veio de browser. Uma classe service para implementar as ações, essa já não deve saber mais nada sobre HTTP. Para todos os efeitos ela nem sabe que é web. E por último uma classe repositório que cuida de gravar e retornar os membros.

Alguns programadores ainda fariam a classe repositório ser agnóstica em relação ao banco de dados. Eu geralmente não vou tão longe.
 

Bug_Secular

Bam-bam-bam
Mensagens
3.357
Reações
4.789
Pontos
303
Do ponto de vista de programação moderna está muito errado. Uma classe de modelo de jeito nenhum pode acessar GET e POST. Método construtor serve para iniciar atributos e deve ter o mínimo de ações possíveis e também não tem return. Métodos estatícos raramente são usados.

Eu faria uma classe controller para tratar o que veio de browser. Uma classe service para implementar as ações, essa já não deve saber mais nada sobre HTTP. Para todos os efeitos ela nem sabe que é web. E por último uma classe repositório que cuida de gravar e retornar os membros.

Alguns programadores ainda fariam a classe repositório ser agnóstica em relação ao banco de dados. Eu geralmente não vou tão longe.

Muito obrigado.

Esses dos métodos GETS e POSTS fiz mais pra ter controle, apesar de não ser o correto. Mas e se eu não tivesse um construtor... o POST e GET estaria errado também?

Teria como você fazer como você fazer a programação correta (tipo programar mesmo) baseada neste código Considerando que tenho que me conectar ao BD e puxar dados de lá...?
PHP:
<?php
    class Membro{

//Sei que costumam colocar uns atributos aqui, como tipo: $nome, $email, $senha, $id... Mas em muitas ocasiões, mesmo estando na mesma classe, gosto de passar pelos parametros.

        public function __construct(){
            if(isset($_GET["acao"]) && is_string($_GET["acao"])){
                switch($_GET["acao"]){
                    case "adicionar":
                        $this -> adicionar_membro();
                    ;
                    break;
                    case "editar":
                        $this -> editar_membro();
                    ;
                    break;
                    default:"";
                    break;
                }
            }
            return false;
        }
   
        public function adicionar_membro(){
            if(isset($_POST["email"]) && is_string($_POST["email"]) && isset($_POST["senha"]) && is_string($_POST["senha"])){
                //Podendo retonar true ou erro
            }
            return false;
        }
   
        public function editar_membro($id=0){
            if(!is_array($this -> getMembro($id))){
                return false;
            }
            if(isset($_POST["email"]) && is_string($_POST["email"]) && isset($_POST["senha"]) && is_string($_POST["senha"])){
                //Podendo retorna true ou erro
            }
            return false;
        }
   
        public static function getMembro($id){
            //Se existir, retorna o array. Se não, false.
        }
   
        public static function getMembros(){
            //Aqui consulta com o banco de dados e e retorna o array de membros
        }

    }
?>
 
Ultima Edição:

dk120

Lenda da internet
Mensagens
41.900
Reações
95.060
Pontos
2.179
A melhor coisa que tem é usar um framework. Com Symfony e Laravel quase tudo que postei acima já vem pré pronto.

E orientação é objetos vem com muitos anos de prática. A pessoa até pode estudar, mas aprendemos mesmo lendo e produzindo muito código.
 

Bug_Secular

Bam-bam-bam
Mensagens
3.357
Reações
4.789
Pontos
303
A melhor coisa que tem é usar um framework. Com Symfony e Laravel quase tudo que postei acima já vem pré pronto.

E orientação é objetos vem com muitos anos de prática. A pessoa até pode estudar, mas aprendemos mesmo lendo e produzindo muito código.
Com java até eu conseguia entender, acredito que por fazer sistemas mais simples. Mas com PHP ta sendo um pouco duto e acabo "bugando" em alguns casos, como este que postei.

Estou vendo aqui e percebi os erros. Mas vou continuar praticando.

A minha neura também é se é uma boa pratica fazer um SELECT, INSERT, UPDATE através de uma função dentro de uma classe? (Tipo este do link).

Muito obrigado, @dk120. vc tá sendo foda!(no bom sentido), ahsuauhsuas.
 
Ultima Edição:


Crystal

Mil pontos, LOL!
Mensagens
26.887
Reações
28.596
Pontos
1.179
Eu vou dar a mesma dica que o amigo dk, estava meio perdido com relação ao Java, migrei pro framework Springboot e foi só alegrias, entendi a nuances de programar orientado à objetos e está sendo muito mais prazeroso o backend agora.
 

Bug_Secular

Bam-bam-bam
Mensagens
3.357
Reações
4.789
Pontos
303
Eu vou dar a mesma dica que o amigo dk, estava meio perdido com relação ao Java, migrei pro framework Springboot e foi só alegrias, entendi a nuances de programar orientado à objetos e está sendo muito mais prazeroso o backend agora.
Estou analisado o phpbb e algumas referências. A gente só aprende "mexendo" mesmo.
 

Crystal

Mil pontos, LOL!
Mensagens
26.887
Reações
28.596
Pontos
1.179
Estou analisado o phpbb e algumas referências. A gente só aprende "mexendo" mesmo.
Vou começar a usar PHP agora para fazer uma página de admin/dashboard no meu site pessoal, nunca trabalhei com essa linguagem mas existe um framework bem conceituado para ela chamado Lavarel, o próprio DK comentou isto, talvez eu já utilize ele depois da minha experiência com Java cru.
 

RainbowSix

Mil pontos, LOL!
Mensagens
5.621
Reações
9.295
Pontos
1.304
Eu nunca entendi a necessidade de se programar orientado a objetos em uma linguagem como php que é lida de cima pra baixo como um script, sem eventos, sem nada interativo. Além disso programar de forma procedural sempre foi mais rápido na execução.

Depois de 15 anos só trabalhando assim com php agora que estou usando mais javascript tenho dificuldade de programar orientado a objetos, o que em JS faz muito mais sentido.
 

dk120

Lenda da internet
Mensagens
41.900
Reações
95.060
Pontos
2.179
Eu nunca entendi a necessidade de se programar orientado a objetos em uma linguagem como php que é lida de cima pra baixo como um script, sem eventos, sem nada interativo. Além disso programar de forma procedural sempre foi mais rápido na execução.

Depois de 15 anos só trabalhando assim com php agora que estou usando mais javascript tenho dificuldade de programar orientado a objetos, o que em JS faz muito mais sentido.

Acredite, faz uma diferença brutal. Eu trabalho numa empresa que termos de tudo, projetos modernos com Symfony, projetos orientados a objetos mas sem framework, e estilo antigo.

Sem comparação. Eu diria que é até anti profissional fazer algo sem framework, em qualquer linguagem. Ainda mais PHP que é uma linguagem que deixa os programadores fazerem muita cagada. E acredite, eles fazem.
 

CidoLoco

Bam-bam-bam
VIP
Mensagens
3.138
Reações
2.083
Pontos
354
Da uma lida a respeito de MVC e pega outras linguagens de exemplo. Se você pegar um projeto de Rails (Ruby), Django (Python) e Spring Boot (Java), vai ver que é tudo meio parecido.

Lembrando que um dos conceitos de orientação a objetos é o encapsulamento: os dados de uma entidade e o código que modifica estes dados deve andar juntos (por isso devem ficar na mesma classe). O código de controle da aplicação (o que acontece quando faz get, post e etc) não faz parte do dado da entidade. Portanto, você tem uma classe Membro com os dados do membro e as ações possíveis de se realizar com ele e outro lugar você faz o mapeamento das rotas (get/post) e chama os métodos de Membro.

Como disseram, pega um framework como o Laravel porque esse tipo de framework já te coloca "em trilhos", com todas as coisas no local certo.
 
Topo Fundo