• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Eddu

Problemas com adaptação a PO, serialize

11 mensagens neste tópico

Boas Pessoal, após a minha apresentação aqui vou deichar a minha primeira dúvida.

Comecei á dias a tentar mudar as minhas rotinas de programação para passarem a funcionar com orientação a objectos.

Tenho muito experiencia em java, pelo que em php nenhuma.

estava então a tentar fazer um  script simples para ver se funcionava como pensava, entao pensei o seguinte:

crio uma página, em que a primeira coisa que escrevo é login....o programa cria-me então um objecto chamado teste...em que mostra depois um nome.

posteriomente a escrever login, quero escrever qualquer coisa...e que o meu objecto seja mudado consoante o que for escrito, aqui fica o código:

______________________________

<?php 
include('teste.php');

if(isset($_SESSION)){
session_start();
}
if(isset($_POST['textfield']) && $_POST['textfield']=="login"){
$teste=new teste();
$_SESSION['teste']=serialize($teste); 
$teste->atribuirNome('eddu');
} else {
if(isset($_POST['textfield'])){
$teste = unserialize($_SESSION['teste']);
$teste->atribuirNome('eddu');
}
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Untitled Document</title>
</head>

<body>
<form id="form1" name="form1" method="post" action="teste_form.php">
  <p>
    <input type="text" name="textfield" />
    <input type="submit" name="Submit" value="Submit" />
  </p>
  <p> <?php if(isset($teste)) echo $teste->buscarNome();?></p>
  <p>  </p>
</form>
</body>
</html>

_____________________________________

Objecto:

_____________________________________

<?php 
  class teste {
  	var $nome="carlos";
  	
function atribuirNome($nome_="guest"){
	$this->nome=$nome_;
}

function buscarNome(){
	return $this->nome;
}

  }
?>

________________________________

tudo corre bem ..faço login, ele escerve o que quero..mas posteriomente, quando escrevo algo sem ser login, ele dá erro porque não consegue atribuir a $teste um objecto #Fatal error: Call to a member function atribuirNome() on a non-object in C:\wamp\www\Aquario\teste_form.php on line 19

#

Espero que me ajudem a resolver este problema, para finalmente passsar a utilizar linguagem orientada aobjectos como faço em java.

Carlos Correia

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

tens um if... else

No if crias o objecto e acedes a um membro da classe na boa.

Mas no else não crias o objecto, logo da esse erro.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

tens um if... else

No if crias o objecto e acedes a um membro da classe na boa.

Mas no else não crias o objecto, logo da esse erro.

boas pedrotuga, a ideia é mesmo esssa... é criar o objecto apenas uma vez...para depois o poder utilizar ao longo do programa..á medida que vou submetendo o formulario.

é como se tivessemos um objecto de sessão guardada num $_SESSION['sessao'], e quisesse ao longo de todas as páginas, ir tendo aceso ao mesmo objecto, que por exemplo foi instanciado apenas uma vez no login.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não podes guardar objectos. Para o que estás a fazer, aconselho o uso de sessões. :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Resolvido, o codigo ficou o mesmo mudou apenas a sessão ao inciar

if(isset($_SESSION)){

para  session_start();

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não podes guardar objectos. Para o que estás a fazer, aconselho o uso de sessões. ;)

Pode. É esse o uso do serialize. Menos comum em PHP, MUITO comum em Java.

Gostava de ver um artigo sobre isso. Se ninguém tiver interessado em escrever vou pensar nisso

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não podes guardar objectos. Para o que estás a fazer, aconselho o uso de sessões. ;)

Pode. É esse o uso do serialize. Menos comum em PHP, MUITO comum em Java.

Gostava de ver um artigo sobre isso. Se ninguém tiver interessado em escrever vou pensar nisso

Eu quando pensei em guardar objectos, estava a pensar em guardar mesmo tudo, funções inclusivé. :D
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

@ eddu: não percebeste... caso a condição do if não se verifique o objecto não é criado nunca.

Se queres cria-lo independetemente do rumo que a execução do script tome então tens que o criar  antes de um teste da condição if else.

Tipo... se entrares no else vais tar a utilizar um objecto que não existe.

@ djthyrax: acho que estás um pouco confundido. Um objecto só tem atributos, a classe à qual ele pertence é que tem membros. Essa classe tem que estar definida onde quer que seja que os objectos são utilizados. Poderia eventualmente guardar-se o código de uma classe na sessão e depois interpretar esse código, mas isso seria um exemplo paradigmático daquilo que vulgarmente se chama código-esparguete.

Normalmente define-se a classe num script e inlcui-se esse script.

@mx+: penso que não há grande alarido sobre isto por aí fora pela simples razão de ser trivial fazer uma operação dessas.

serializa, manda para a sessão, desserializa

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

@ djthyrax: acho que estás um pouco confundido. Um objecto só tem atributos, a classe à qual ele pertence é que tem membros. Essa classe tem que estar definida onde quer que seja que os objectos são utilizados. Poderia eventualmente guardar-se o código de uma classe na sessão e depois interpretar esse código, mas isso seria um exemplo paradigmático daquilo que vulgarmente se chama código-esparguete.

Normalmente define-se a classe num script e inlcui-se esse script.

Eu quando escrevi o primeiro post, estava confuso sim. E, ao fazeres serialize() de um objecto, não vais guardar as funções, ou seja, só guarda a estrutura, antes de poderes usar o objecto, tens de fazer include à classe.
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tanto este tópico como o outro deram-me ideias novas. Acho que é pratica comum abusar da BD em PHP. Chamar a BD para tudo, sempre a verificar e a tirar indicaçoes.

Vou começar a pensar em serializaçao como forma fácil e rápida de sacar informação não-tão-dinamica.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

eu até acho o contrario... quando olho para software comercial só me vem a cabeça isto:

"Mas porque é que eu não uso e abuso da base de dados, ela serve é par ser usada a todo o gás"

Uma lição que tenho aprendido. Nos dias que correm armazenar dados é barato, posto isto quanto mais dados se tiver melhor.

Bota informação sobre tudo e mais alguma coisa tudo bem guardadinho e pronto a usar.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora