Esclarecimeno MVC em PHP

, ,

Boa tarde galera, estou iniciando com o php OO e com MVC, gostaria de saber se o trecho de código a baixo foge dos padrões, e se tem alguma melhoria para ser implementada.
Desde já agradeço a todos que colaborarem.

<form method="post" action="getdata.php"> 
<label> 
Nome <input type="text" name="nome" /> 
</label> 
<label> 
Email <input type="text" name="email" /> 
</label> 
<input type="submit" value="Enviar" /> 
</form> 


<?php 

class getData{ 
private $nome; 
private $email; 

public function getNome(){ 
$this->nome = $_POST['nome']; 
} 

public function getEmail(){ 
$this->email = $_POST['email']; 
} 

public function exibir(){ 
echo $this->nome . ' <br /> ' . $this->email; 
} 
} 

$getData = new getData(); 

$getData->getNome(); 
$getData->getEmail(); 
$getData->exibir(); 

?>

Veja, em OO, o encapsulamento é recomendado, porém, quando você encapsula atributos utilizando métodos assessores, os métodos com nomes iniciados em get são, normalmente, identificados como métodos para obter o valor de um atributo e não para definir o valor ao atributo.
E o nome da classe, ‘getData’, está bem estranho, também.

Creio que você esteja um pouco perdido com relação a isso.
Eu criaria um arquivo como “processaRequisicao.php” e nele colocaria o recebimento e validação dos parâmetros da requisição. Só então eu invocaria a criação dos objetos.

//processaRequisicao.php
include ('caminho/para/o/arquivo/com/a/classe/arquivoComAClasse.php');
$nome = $_POST['nome'];
//Demais parâmetros aqui
ClasseComOsDadosQueQuero objeto = new ClasseComOsDadosQuequero();
//Demais código aqui

Eu estou iniciando com o PHP agora mas a algum tempo já programo com Java, a questão do nome da classe e o pilar do encapsulamento quebrado eu percebi, este exemplo eu encontrei na net dando uma pesquisada rápida.
Eu achei estranho em um arquivo criar a classe e instancia-lo no mesmo arquivo. Se fosse em java faria da seguinte forma

public class ProcessaDados extends HttpServlet {
    public void doPost(HttpServletRequest req, HttpServletResponse res)
      throws ServletException, IOException {
          //recuperaria os dados 
          String nome = req.getParameter("nome");
          String email = req.getParameter("email");
         //criaria o Modelo e realizaria o restante da regra
    }

É que java já encapsula esta parte, coisa que o PHP gerencia de forma diferente.
Você não precisa criar a classe e instanciar a mesma num único arquivo, pode criar a classe no arquivo específico e ter um outro só para essa outra parte da coisa.

1 curtida

Se for possível poderiam e exemplificar uma forma elegante de fazer isso?

Dá uma olhada

Legal. Então seria algo assim.

<form name="enviar" action="CtrlPessoa.php" method="post">
    <label>Nome: <input type="text" name="nome" /></label>
	<label>Email: <input type="text" name="email" /></label>
	<label><input type="submit" name="enviar" value="enviar" /></label>
</form>

CtrlPessoa.php

<?php
	include 'Pessoa.php';
	
	$pessoa = new Pessoa();
	$pessoa->set_nome( $_POST['nome'] );
	$pessoa->set_endereco( $_POST['endereco'] );
	
	echo $pessoa->imprimir();

<?php
class Pessoa
{
	
	private $nome;
	private $endereco;

Isso mesmo?

Sim!

Obrigado :smiley: