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?
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?