Ir para conteúdo

POWERED BY:

Arquivado

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

Jefferson NF

s PHP OO

Recommended Posts

Boa tarde pessoal

 

Estou com algumas duvidas no desenvolvimento de sistemas OO com PHP:

Estou começando um sistema aki e ja identifikei que terei pelo menos tres atores(aluno,professor e administrador), consequentemente, terei tres classes, uma pra cada. Mas ambos tem em comum o login, em cada classe eu coloco a função para verificar o login e gerar as sessoes? Ou nao, crio uma classe autentica.php ou login.php, que irá receber o login e a senha e assim verificará e criará as variaveis de sessao? Ou crio uma classe usuario.php, por exemplo, e nessa classe coloco tudo que for comum aos tres atores(usuarios), como o login?

 

Eu comecei a fazer alguma coisa aqui, fiz um arquivo index.php, dentro do diretorio apresentacao/login (esse diretorio apresentacao/ fica com todos os arkivos de formulario, telas do sistema, etc), esse index pega o login e a senha e envia para um arkivo chamado autentica.php(que está dentro do diretorio classes/). Essa divisao de camas esta correta (classes, apresentação,etc)?

 

desde ja agradeço

Compartilhar este post


Link para o post
Compartilhar em outros sites

Está sim!

Mas ai no caso,o autentica tem as suas regras de négocio (valida se o que o cara digito ta correto,etc),enquanto outra classe faz a conexão com o banco de dados(se desejar aplicação 3 camadas).

Cara,acho que nesse caso o mais viável,é fazer uma classe chamada autores (ou autentica,que seja),que faz o login para você,dependendo do nível do usuário,retorna o login dele como objeto da classe professor,aluno ou administrador.

Nesse classe autores,você pode definir métodos e atributos que os 3 tipos de usuário terão em comum.

A base seria algo como:

autores.php:

<?php
class autor {
	private $login,$senha;

	//Construtor
	public function __construct($login,$pass){
		$this->setLogin($login);
		$this->setSenha($pass);
	}
	
	//Métodos setters
	public function setLogin($login){
		$this->login =& $login;
	}

   public function setSenha($senha){
	   $this->senha = & $senha;
   }
   
   public function getLogin(){
	   return (String) $this->login;
   }

   public function getSenha(){
	   return (String) $this->senha;
   }

}
?>

autoresDAO.php:

<?php
require 'alunos.cls.php';
require 'professores.cls.php';
require 'administradores.cls.php';

class autoresDAO {
	
	//
	public function doLogin($autor){
		//Faazer o login e depois checar o nivel
	   if($nivel == 'aluno'){
		   return (object) new aluno(); 
	   } else if($nivel == 'professor'){
		   return (object) new professor();
	   } else if($nivel == 'administrador'){
		   return (object) new administrador();
	   }
	}
}
?>

Fico meio que uma factory...fico feio pacas....mas você pega como exemplo e melhora.

Usando:

<?php
session_start();

require 'classes/autores.php';
require 'classes/dao/autoresDAO.php';

$login = $_POST['login'];
$senha = $_POST['senha'];

$autor =& new autor($login,$senha);
$autorDAO =& new autoresDAO;
$l = $autorDAO->doLogin($autor);
$_SESSION['loginobj'] = ($l != null)? $l : null;
unset($autorDAO);
unset($autor);
?>

A session chama as funçoes e etc da classe aluno,professor ou administrador.

Fico feio pacas!

Melhora ai!

Abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

valeu pela ajuda de voces

brigadao mesmo

vou ver isso ja ja,com + calma

nem me liguei em fazer uma classe pai e as outras herdando dela, burro msm hhahah,agora q caiu a ficha

mas nao ficaria estranho uma classe só com login e senha,a principio?

Vou ver ja ja o q faço aki

Mt obrigado msm

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não fica não.

Bom,é legal você fazer as classes extenderem sim.

Porque ai quando setar seu objeto,você chama o getLogin e getSenha e faz a validação,sem precisar reescrever esses métodos na sua extends.

Um jeito legalzin seria nas classes você dar um require na autor,no construtor pegar os parametros login e senha e chamar os setters que foram passados da super (setLogin,setSenha).

Ai a autoresDAO ficaria algo como:

<?php
require 'alunos.cls.php';
require 'professores.cls.php';
require 'administradores.cls.php';

class autoresDAO {
	
	//
	public function doLogin($autor){
		//Faazer o login e depois checar o nivel
	   if($nivel == 'aluno'){
		   return (object) new aluno($autor->getLogin(),$autor->getSenha());
	   } else if($nivel == 'professor'){
		   return (object) new professor($autor->getLogin(),$autor->getSenha());
	   } else if($nivel == 'administrador'){
		   return (object) new administrador($autor->getLogin(),$autor->getSenha());
	   }
	}
}
?>

Como o objeto extende,se quiser chamar o login ou senha basta:

<?php
session_start();
$login = $_SESSION['loginobj']->getLogin();
$senha = $_SESSION['loginobj']->getSenha();
?>

Abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

po vlw msm pela tua ajuda

brigadao

to mei perdido pq to começando agora no mundo do PHP OO, mas ja deu pra entender

soh pra resumir entao:eu tenho um formulario de login q joga os dados para a classe usuario(classe pai) esse classe inclui a classe autentica(exemplo).

dividindo em camadas: ficaria o formulario do login na pasta apresentacao/, e os outros arkivos? ficariam no diretorio classes/? seria +ou- isso, soh pra reforçar msm,por isso estou perguntando isso td d novo,resumidamente.

Outra duvida rapida, no formulario de login, por exemplo, dou varios includes:

include ("../../servicos/configuracoes.php");
include ("../../servicos/conexaoMySQL.php");
//include ("../../classes/usuario.php");
existe outro jeito de eu fazer esse cabeçalho? ou nao tem outro jeito pra cada arkivo do meu sistema derei q dar o respectivo include?

desde ja agradeço

bom dia

Compartilhar este post


Link para o post
Compartilhar em outros sites

... Outra duvida rapida, no formulario de login, por exemplo, dou varios includes:

include ("../../servicos/configuracoes.php");
include ("../../servicos/conexaoMySQL.php");
//include ("../../classes/usuario.php");
existe outro jeito de eu fazer esse cabeçalho? ou nao tem outro jeito pra cada arkivo do meu sistema derei q dar o respectivo include? ...

Existe sim! Veja este link.

 

Um abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como o amigo acima comentou...

Bom...a estrutura da suas pastas (pegando meu exemlo) seria algo como:

/form_login.php
/classes/autor.cls.php
/classes/professor.cls.php
/classes/aluno.cls.php
/clasess/administrador.cls.php
/classes/dao/autorDAO.cls.php

Você ia ter que dar uma mudada nos requires que eu dei!

Abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

funcionou aki o autoload()

vlw pela ajuda de voces

estou soh com algumas duvidas: eu posso fazer dentro da function autoload + d um require?

por exemplo:

 

function __autoload($classe)
{
  //require_once("../../classes/".$classe.".class.php");
  require_once("../../servicos/".$classe.".class.php");
}

tentei desse jeito ae e nao deu certo,apenas incluiu do diretorio classes.

outra duvida q tenho eh se crio msm esse diretorio servicos,pq ateh onde sei tem essa camda de serviços neh? mas sao classes dentro do diretorio serviços,eh bom essa separação?ou nao eh melhor colocar td dentro do reitorio classes?

eu particularmente prefiro essa divisao se conseguir dar o require na function autoload pra mim está bom

 

desde ja argadeço

Compartilhar este post


Link para o post
Compartilhar em outros sites

bom dia pessoal

fiz assim:

 

usuario.php

class Usuario 
{
  protected $login, $senha;
  
  function Usuario($login="jefferson",$senha="123")
  {
	$this->login = $login;
	 $this->senha = md5($senha);
  }
  
  function Login() 
  { 
	return $this->login;
  } 
  
  function Senha() 
  { 
	return $this->senha;
  }
  
  function Autentica() 
  {
	//Aqui estara o metodo de acesso ao banco.
	$login  = $this->login;
	$senha  = $this->senha;
	/*$query = "SELECT login,senha FROM usuarios WHERE login='$login' AND senha='$senha'";
	$resultados = mysql_query($query) or die(mysql_error());
   
	if (mysql_num_rows($resultados)>0) 
	{
	  $this->GeraSessao($this);
	  return true;
	} 
	else
	{
	  return false;
	} */
}
  function GeraSessao($usuario)
  {
	session_start();
	$_SESSION['usuario'] = $usuario;
  }

professores.php:

 

class Professores extends Usuario
{  
  function Login() 
  {
	  //return $this->login;  
	  return parent::Login();
  }
}

eh assim mesmo? estou no caminho? é só parent:: mesmo?

se alguem puder me ajudar e dar umas dicas sobre parent,extends,etc...

ainda nao consegui dar + de um require com a função autoload(),como faço isso?

desde já agradeço

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vou dar uma mini "ressada" nesse tópico.

 

Fiz um sistema em PHP.

 

Agora, queria refazê-lo sando PHP OO.

 

else if($nivel == 'administrador'){
		   return (object) new administrador($autor->getLogin(),$autor->getSenha());
	   }

Pode me dar um exemplo para a class administrador?

 

Se alguem tiver algumas páginas desenvolvidas em PHP OO, pode me postar um link?

 

Artigos sobre OO também seriam interessantes.

Compartilhar este post


Link para o post
Compartilhar em outros sites

http://forum.imasters.com.br/index.php...p;#entry1178475

 

jefersson...usando o code citado (exemplo apenas),bastaria tirar a estrutura condicional e o break após o require.E seu cógido está mais ou menos certo sim...aconselho que o reveja após estudar um pouco mais sobre OO.

 

gabriel...a classe administrador no exemplo teria apenas os 2 atributos ( [login e senha] como a autores).Em um sistema 'real',isso seria diferente.Exemplos de OO não tenho a te dar.

 

Abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

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