Jump to content

Problemas com adaptação a PO, serialize


Eddu

Recommended Posts

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

Link to comment
Share on other 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.

Link to comment
Share on other 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é. 😄

Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!

Link to comment
Share on other 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

Link to comment
Share on other 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.

Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!

Link to comment
Share on other 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.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.