Jump to content


Photo

Problema Com Sessions E Classes


  • Faça o login para participar
19 replies to this topic

#16 Felipe Pena

Felipe Pena

    O temor do Senhor é o princípio da sabedoria

  • Ex-Admins
  • 6441 posts
  • Sexo:Masculino

Posted 05/12/2009, 12:56

Aqui está um teste simples:

<?php

class teste {
	private $_nome;
	
	public function __construct($nome) {
		$this->_nome = $nome;
	}
	
	public function getNome() {
		return $this->_nome;
	}
}

session_start();

if (isset($_SESSION['user'])) {
	var_dump($_SESSION['user']->getNome());
	unset($_SESSION['user']);	
} else {
	$_SESSION['user'] = new teste('Felipe');
}


A primeira vez que visualizar o arquivo com este código ele irá guardar o objeto na sessão, ao fazer o refresh ele irá recuperar o valor da propriedade privada _nome com o método getNome() e irá destruir o objeto. É isto que você deseja realizar?

Vale lembrar que a declaração da classe deve estar visível quando você tentar acessar o objeto que esta na sessão.

Mais informações: http://docs.php.net/...rialization.php
Felipe Pena
[...] ó terra, terra, terra; ouve a palavra do Senhor. — Jeremias 22:29

#17 djoser

djoser

    Novato no fórum

  • Usuários
  • 23 posts
  • Sexo:Não informado

Posted 05/12/2009, 19:23

O único problema é que preciso logo na primeira vez que ele guarde os objetos na sessão e já fique acessível para leitura. Vou usar esta classe para criar um menu que mostre as informações do usuário e sempre que quiser chamar alguma informação, como em foruns para imprimir nome do usuario, data de participação etc.

Pensei com refreshe manter o código, não cheguei a testar mas pelo código parece que vai ser muito ineficiente.

Como faço isso?

Deu para perceber que ainda tenho dificuldade um pouco com OOP e Session hehe.

#18 djoser

djoser

    Novato no fórum

  • Usuários
  • 23 posts
  • Sexo:Não informado

Posted 08/12/2009, 13:08

Como faço para em uma vez já setar tudo e ficar acessível?


Procurei no manual do PHP mas nao entendi muito bem o que faz cada linha do if que tem aí.


Obrigado

#19 S4ur0N

S4ur0N

    Ainda Normal

  • Usuários
  • 274 posts
  • Sexo:Não informado
  • Localidade:Blumenau - SC

Posted 09/12/2009, 23:26

No último trecho que código que você postou, tenta substituir a linha:
echo "$_SESSION["usuario"]->getNome()";

por...

echo $_SESSION["usuario"]->getNome();

sem as "aspas"...
Mais uma coisa, não reli o tópico pra ver se já foi perguntado... o PHP está exibindo os erros pra você?
©2009 - Todos os direitos reservados.

#20 djoser

djoser

    Novato no fórum

  • Usuários
  • 23 posts
  • Sexo:Não informado

Posted 20/12/2009, 13:18

Pronto. Resolvi o problema. O problema estava sendo em criar um construtor. Mexendo nas sugestões do Eclesiastes consegui resolver.

Vou postar o código pronto, no caso de alguém ter a mesma dúvida. Obrigado por todos que ajudaram. Agora consegui entender bem melhor sobre OOP e SESSIONS dentro de php. Acho esses dois um pouco mais difíceis hehe.

A classe teste.php:
<?php


class teste { 
        private $nome;
		private $email;
         
        public function __construct($nome) { 
                $this->nome = $nome;
				
				$resultado=mysql_query("SELECT email FROM usuarios WHERE username='$nome'");
				$email3=mysql_fetch_row($resultado);
				$this->email = $email3[0];

				
        } 
         
        public function getNome() { 
                return $this->nome; 
        }
		
		public function getEmail(){
			return $this->email;
		}
 
}

?>

No login:
...
include "teste.php";
			session_start();
			if (isset($_SESSION['user'])){
				unset ($_SESSION['user']);
				$_SESSION['user'] = new teste($username);
			}
			else { 
        $_SESSION['user'] = new teste($username); 
}

Imprimindo as informações numa página qualquer:

<?php

include "teste.php";
session_start();
echo $_SESSION['user']->getNome();
echo $_SESSION['user']->getEmail();

?>





1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq